一如既往,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
隐藏在编程语言的古老历史中。我猜 K&Rtype name
认为它更容易强调使用并且仍然有指针等是类型。
如果他们选择了name : type
,他们要么会从声明中分离使用:p : int*
要么会让指针不再是类型,而是像对名称的装饰一样:*p : int
。
就个人而言:想象一下,如果他们选择了后者并且 C++ 继承了它——它根本就行不通,因为 C++ 强调类型而不是使用。这也是为什么int* p
说是“C++方式”,int *p
是“C方式”的原因。
如果是这样,假设的新编程语言是否有理由默认不使用尾随返回类型?
是否有理由默认不使用扣除?;) 参见,例如 Python 或 Haskell(或任何与此相关的函数式语言,IIRC)——没有明确指定返回类型。还有一个将这个特性添加到 C++ 的运动,所以在未来的某个时候你可能会看到只是auto f(auto x){ return x + 42; }
或什至[]f(x){ return x + 42; }
.