C++03のPOD
Fermilab | Homeによれば、C++03規格においてC互換型がPODである(と規格の脚注に書いてあると書いてある)。勉強のために、JIS X 3014:2003を拾い読みする。
集成体は初期化子節が使えるので初期化が簡単。
次のいずれももたない配列またはクラスを、集成体と呼ぶ。
JIS X 3014:2003 - 8.5.1. 集成体
- 利用者宣言のコンストラクタ
- 非公開または限定公開の非静的データメンバ
- 基底クラス
- 仮想関数
集成体の制限を厳しくした構造体と共用体がC互換クラスになる。ん、《クラスキー》classを使用するとC互換クラスじゃないのか? 他のところでうまいこと定義されるのかな?
構造体は、《クラスキー》structを付けて定義するクラスとする。そのメンバ及び基底クラスは、特に指定がない限り公開となる。共用体は、《クラスキー》unionを付けて定義するクラスとする。そのメンバは、特に指定がない限り公開となり、一度に一つのデータメンバだけを保持する。
C互換構造体は、次のいずれももたない集成体クラスとする。
- 非C互換構造体(又はその型の配列)である非静的データメンバ
- 非C互換共用体(又はその型の配列)である非静的データメンバ
- 参照型である非静的データメンバ
- 利用者定義のコピー代入演算子
- 利用者定義のデストラクタ
同様に、C互換共用体は、次のいずれももたない集成共用体とする。
- 非C互換構造体(又はその型の配列)である非静的データメンバ
- 非C互換共用体(又はその型の配列)である非静的データメンバ
- 参照型である非静的データメンバ
- 利用者定義のコピー代入演算子
- 利用者定義のデストラクタ
C互換クラスは、C互換共用体またはC互換共用体のいずれかとする。
JIS X 3014:2003 - 9. クラス
なんか定義の再帰がおかしい気がする。スカラ型はどうやって導かれるんだろう。C互換型の定義から?
算術型、列挙型、ポインタ型、及びメンバへのポインタ型、並びにそれらのcv修飾付きのものを、スカラ型と呼ぶ。スカラ型、C互換構造体型、C互換共用体型及びそれらの型の配列、並びにそれらのcv修飾付き版を、C互換型と呼ぶ。
JIS X 3014:2003 - 3.9. 型
うーむ、難しい。早いところC++0xに移行したくなってきた。
gcc最適化
Mac OS X 10.5.8上で下記のgccを使用した。早いところ、Snow Leopardを入れよう。
- gcc version 4.0.1 (Apple Inc. build 5488)
- gcc version 4.2.1 (Based on Apple Inc. build 5636) (LLVM build 2.5)
どちらもApple版なので-fastオプションを持っている。
On Intel target, -fast currently enables the following optimization flags:
-O3 -fomit-frame-pointer -fstrict-aliasing -momit-leaf-frame-pointer -fno-tree-pre -falign-loops
All choices of flags enabled by -fast are subject to change without notice.
http://developer.apple.com/Mac/library/documentation/Darwin/Reference/ManPages/man1/gcc.1.htmlIntelターゲットにおいて、-fastは今のところ下記の最適化フラグを有効にする。
-O3 -fomit-frame-pointer -fstrict-aliasing -momit-leaf-frame-pointer -fno-tree-pre -falign-loops
-fastがどのフラグを有効かするかは、予告なしに変わることがる。
manには書いていないけれどC++用に-fastcpオプションもある。
-fastcp is intended for C++ only. Currently it is identical to -fast, but its meaning may change in the future to allow for better C++ optimization.
Documentation Archive-fastcpはC++だけを対象とする。現在は-fastと同一だが、よりよいC++最適化が行われるように、将来的には意味が変更されるかもしれない。
x86-64用のコードを生成する場合は-m64オプションを使用する。
Self-Reference-Reference ENGINE
ぼくのなかのぼくのことを、ぼくは話そうと思う。C++は参照の参照を許さないから、ぼくのなかのぼくのなかのぼくは定義されない。この日記をそのように始めようと、ぼくは決意したのだ。
This page is a page of pages that refer to self-reference, though they may or may not be self-referential.
http://uncyclopedia.wikia.com/wiki/Category:Self-reference-referenceこの頁は自己参照を参照する頁のうちの一頁だけど、それらの頁は自己参照的かもしれないしそうでないかもしれない。