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.

Intelターゲットにおいて、-fastは今のところ下記の最適化フラグを有効にする。

-O3 -fomit-frame-pointer -fstrict-aliasing -momit-leaf-frame-pointer -fno-tree-pre -falign-loops

-fastがどのフラグを有効かするかは、予告なしに変わることがる。

http://developer.apple.com/Mac/library/documentation/Darwin/Reference/ManPages/man1/gcc.1.html

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.

-fastcpはC++だけを対象とする。現在は-fastと同一だが、よりよいC++最適化が行われるように、将来的には意味が変更されるかもしれない。

Documentation Archive

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