キーワード (C++)
テンプレート引数で型を引数にとることを示すことに使う(classで代用可能)。
続く識別子が型名であることを示す。
用法2.はなぜ存在するのかというと、曖昧性が生じさせないためである。
たとえばs1に次のようなクラスをテンプレート引数に渡すとする。
すると、仮にtypenameがなければs1<s2>::fの中の文はs2::type *ptr;となる。これはs2::typeとptrの乗算式と見られるので、構文としては正当なC++の式となってしまう(ただしこの例ではptrが宣言されていないためコンパイルエラーになる)。そうならないように、曖昧性を排除するために型名である場合はtypenameを先行させる仕様になっている。
enum単独ではスコープのない列挙型を意味する。enum class、enum structの形で、スコープ付きの列挙型の宣言に使用する(*)。
関数指示子に使用することで、関数をインライン展開するためのヒントをコンパイラに与える。クラスの宣言内で関数を定義した場合は、inlineの有無にかかわらずinlineが指定されたものとして取り扱われる。
inline namespaceの形で透過的な名前空間の宣言に用いる。透過的な名前空間の名前は、名前空間名で修飾しなくても使えるようになる(*)。
文脈依存のキーワード(contextual keyword)は、ソースコード中の特定の位置に現れた場合にのみキーワードとして扱われ、それ以外の箇所では単なる識別子として扱われる(変数名や関数名として使用出来る)。C++11から新たに追加された。
defaultは関数の定義にも用いる。特殊メンバ関数を「= default」の形で定義して、コンパイラ生成のものを使用することを明示する(*)。
C99ではマクロで定義されておりキーワードではないが、C++ではキーワードである。
クラスメンバと継承のアクセス制御に用いられる。
publicはクラスの外部からも自由にアクセスできる。
protectedは宣言したクラス自身とその派生クラスからアクセスできる。
privateは宣言したクラスの内部からしかアクセスできない。
Javaなどとは違い個々の宣言に付けるものではなく、見た目には関数内でラベルを指定するのと似ている。1度指定すると他の指定がなされるか、クラスの宣言が終わるまでは指定した制御が続く。
const/volatile性を取り除く場合に用いるキャストである。他のキャストでconst/volatile性が失われる変換はできない。