下位ページ†
C++ のキーワード†
プリプロセッサ†
#error <error-message>†
- プリプロセッサ実行時、そこを通ると<error-message>を出力して処理を停止する。
- 書式:
#error "error-message"
初期化†
継承される可能性のあるclassは、デストラクタを仮想にする†
- これは下記のような問題を回避する為。
- 継承した子クラスを作る
- その子クラスが、親クラスの型で自分のインスタンスのポインタを返すような使い方をされる場合がある。
- このとき、その親クラスのポインタに対して delete をしてしまうと、子クラスの部分だけがdeleteされていない、中抜けのおかしな実体になってしまう。
- その中抜けなインスタンスに対してアクセスすると、そのときの動作が未定義になってしまう。
型の別名宣言 using†
型を別名宣言する場合†
関数ポインタに対して宣言する場合†
typedef void (*funcptr)(int); // typedef を使用する場合
using funcptr = void (*)(int); // using を使用する場合
コンパイル時に構造体のサイズを知る†
- 下記のようなマクロを仕込むことで、コンパイル時に構造体 foo のサイズが取得出来る。
#define PRINT_SIZEOF(type) PRINT_SIZEOF_(type, __LINE__)
#define PRINT_SIZEOF_(type, line) \
void print_sizeof_##line() { asm volatile("size of " #type " is %0" :: "g"(sizeof(type))); }
struct foo {
type variable;
};
PRINT_SIZEOF(struct foo)
- これを実行するとエラーが発生し、その際に構造体サイズがコンパイルログとして出力される。
gcc / g++†
- gcc (g++) で std ライブラリを使用したコードを make する際、libstdc++.a が必要になる
LDFLAGS += -lstdc++