以下の条件を満たすC++プログラムは作れるか。以下に僕の知りうる限りの予約語を列挙します。
・C++の予約語すべてを一つずつ含む
・プリプロセッサ指令を含まない
auto asm bool break case catch char class const const_cast continue default delete do double dynamic_cast else enum explicit extern false float for friend goto if inline int long mutable namespace new operator private protected public register reinterpret_cast return short signed sizeof static static_cast struct switch template this throw true try typedef typeid typename union unsigned using virtual void volatile wchar_t while
bool, char, short, unsigned, signed, int, long,
float, double, wchar_t の10個が表現できます。
もちろんそれらへのポインタや配列、
constやvolatile
修飾子つきのものもあり得ますが、
同じ型名を2度以上使えないので同じことです。
また、unsigned charなどのような型も使用できますが、
そうするとunsignedとchar
が使えなくなるので、使用できる型の数が減ってしまいます。struct, class, enum, union, typedef
を使用することでそれぞれ一つずつの型識別子を増やすことが出来ます。
ただしこれらによって生成した型識別子は予約語ではないので、
もはやプログラム中に何度でも使用できます。main関数は周知の通りint型を返します。
また、値を返す関数は当然returnを使用しなければなりません。
このことから、
main関数以外に値を返す関数は定義できない、
ということが分かります。voidで宣言された関数voidで宣言された関数というのは、
予約語voidを使用せざるを得ないため、
たった一つしか作れません。
コンストラクタは、
クラス定義中であれば一つも予約語を使用せずに書けるので、
いくつでも定義できます。
デストラクタは当然クラス一つにつき一つしか定義できません。int main()
とたった一つのvoid関数以外には、
コンストラクタとデストラクタしか定義できない、
と分かります。elseにはifが必要。catchにはtryが必要。case, defaultにはswitchが必要。doにはwhileが必要。