いつものように、ここでは K&R が「悪者」です。彼らはその関数構文を C 用に考案し、C++ は基本的にそれをそのまま継承しました。
ここでの推測: C では、宣言は使用法、つまり何かから値を取得する方法を示唆する必要があります。これは以下に反映されています。
- 単純な値:は
int i;
、int
書き込みによってアクセスされますi
- ポインタ:は
int *p;
、int
書き込みによってアクセスされます*p
- 配列:は
int a[n];
、int
書き込みによってアクセスされますa[n]
- 関数:は
int f();
、int
書き込みによってアクセスされますf()
したがって、全体の選択は「単純な値」のケースに依存していました。そして、@JerryCoffin が既に述べたように、type name
代わりに取得した理由はname : type
、おそらくプログラミング言語の古代の歴史に埋もれています。type name
K&R は、使用法に重点を置き、ポインターなどを型にする方が簡単であると判断したと思います。
を選択していた場合name : type
、宣言から使用法を分離するか、p : int*
ポインターを型ではなく、代わりに名前の装飾のようなものにするかのいずれかでした: *p : int
。
個人的なメモ: 彼らが後者を選択し、C++ がそれを継承した場合を想像してみてください。C++ は使用法ではなく型に重点を置いているため、単純に機能しなかったでしょう。が「C++流」「C流」と言われる所以でもあります。int* p
int *p
もしそうなら、仮想の新しいプログラミング言語がデフォルトで末尾の戻り値の型を使用しない理由はありますか?
デフォルトで控除を使用しない理由はありますか? ;) たとえば、Python や Haskell (またはそのことについては関数型言語、IIRC) を参照してください - 明示的に指定された戻り値の型はありません。この機能を C++ に追加する動きもありますので、将来的には単にauto f(auto x){ return x + 42; }
または[]f(x){ return x + 42; }
.