以下の条件を満たす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
が必要。