温馨提示:本文翻译自stackoverflow.com,查看原文请点击:其他 - Keyword for functions in C++?
c++ function keyword parsing language-design

其他 - C ++函数的关键字?

发布于 2020-03-27 15:58:32

为什么C ++没有关键字来定义/声明函数?基本上所有其他设计抽象的语言有一个(structclassconceptmodule,...)。

它会使语言更容易解析并且更一致吗?大多数“现代”语言似乎都采用了这种方式(fn生锈,fun科特林等等)。

查看更多

查看更多

提问者
Touloudou
被浏览
109
Stack Danny 2020-01-31 18:13

C ++的语法主要来自C,而C不提供function关键字。相反,它使用某种语法来表示大多数功能:

[return type] [function name]([paramters]) { } 

因此,如果function引入关键字,我们可以更快地解析并提高可读性。但是,您现在有两种不同的方法来声明某些内容,并且由于向后兼容的必要性,您无法摆脱旧的方法。


但是,让我们假设我们忽略了向后兼容性参数,并假设引入了它:

function int square(int a) { //1
    return a * a; 
} 

//-----------------------------

function square(int a) { //2
    return a * a; 
} 

case的1行为就像关键字指示符一样,它具有好处(易读性,解析)和缺点(给函数声明撒上不必要的噪音)

case 2是一种javascript风格的方法,可让编译器确定返回类型(如此auto处所示)。它可能是最美观的方法,但是C ++是非常静态的类型,因此在不需要它时会增加一层混乱(auto-ness很有用,但肯定不是总是想要的)。


因此,最终,这些中等收益似乎并不能证明引入此类关键字所带来的成本。


额外的一点:

从C ++ 11开始,语言功能使您可以主张一种垂直的方法:

function square(int a) -> int { 
    return a * a; 
} 

这肯定是一个非常可靠的解决方案!但是,关于function关键字的讨论似乎早已平息。当在最新的C ++版本上进行创新时,还有许多其他(可能更重要)的优先事项要讨论时,这是可以理解的。