C++ 是否应避免使用带有尾部返回类型的main?
在下面的代码示例中,C++ 是否应避免使用带有尾部返回类型的main?,c++,c++11,main,c++14,C++,C++11,Main,C++14,在下面的代码示例中,main函数使用C++11尾随返回类型表示法编写: auto main() -> int { //... return 0; } 问题: 是否有任何理由认为应避免使用带尾随返回类型的main,而应首选经典符号 这太愚蠢了 写这样的东西没有好处,没有必要,也没有理由 要学究气,您可以毫无理由地添加自动和->符号 在引入函数参数后,通常使用尾部返回类型推断返回类型。在这里,您已经知道返回类型 如果您的所有函数都使用这种表示法而不需要这样做,您能想象代码库的外观吗?
main
函数使用C++11尾随返回类型表示法编写:
auto main() -> int {
//...
return 0;
}
问题:
是否有任何理由认为应避免使用带尾随返回类型的main
,而应首选经典符号 这太愚蠢了
写这样的东西没有好处,没有必要,也没有理由
要学究气,您可以毫无理由地添加自动
和->
符号
在引入函数参数后,通常使用尾部返回类型推断返回类型。在这里,您已经知道返回类型
如果您的所有函数都使用这种表示法而不需要这样做,您能想象代码库的外观吗?实际上,您应该将所有存储(如存储规范、静态等)放在最前面,并将返回类型放在最后,以便与异常规范、常量说明符和朋友混合在一起
你不需要说服我的人我不反对跟踪返回类型;我反对“暴发户”的心态,即在不需要的地方使用功能,我担心C++会成为一个巨大的风格块,并在自身的压力下崩溃
规范的轻松转变是不稳定和缺乏沟通的迹象。像Python的这样的功能是一件好事,经过训练的眼睛应该小心地丢弃 这是完全有效的,而且效果很好 唯一值得关注的问题是它是新的。它可能会使那些只熟悉C++98的代码读者感到困惑或惊讶 但是它是有效的,所以如果您愿意,可以用这种方式编写您的
main
。首先,让我们看看为什么您一般要使用尾部返回类型
关于你先前的问题:
尾随返回类型是一种专门的语言特性,主要是
对泛型库编写器(即泛型库的编写器)有用
图书馆,而不是碰巧写作的普通人
库),类似于decltype。顺便说一句,这两种语言的特点
在模糊或长lambda表达式中也有一些有限的用法,但是
它们不应该在“普通”用户代码中大量使用
来自(您在上一个问题中已链接,因此您必须已阅读):
尾随返回类型的意义主要在于函数
模板,现在可以在其中对函数使用参数
与decltype()
一起确定返回类型。例如:
template <typename M, typename N>
auto multiply(M const& m, N const& n) -> decltype(m * n);
模板
自动乘法(M常量&M,N常量&N)->decltype(M*N);
这将声明函数multiply()
,以返回由m*n
生成的类型。将decltype()
放在multiply()
前面是无效的,因为m
和n
尚未声明
<强>我同时考虑了Kerrek SB和Dietmar K UHL C++专家,发现他们的指导方针很好。现在让我们看看上面的指南如何适用于<代码> int()/<代码>。一些意见:
不是函数模板int main()
- 没有进行类型推断
- 返回类型(
)在可预见的未来不会改变;我们可以放心地使用这种类型int
int main()
不需要使用此功能
我的问题到此为止。有意思的问题,但这有实际需要吗?我想不出有什么缺点,但同样,我也看不出有什么实际用途;-)
int main()
越短越好。另外,(尽管不相关)返回0
可以在main
中省略。为什么您希望这个问题会出现?我个人的看法是,我们都受过训练,下意识地将intmain()
模式匹配为无害的东西。但是,每当我看到auto main()->int
时,我都会对它再看一眼,哪怕只是想“多么愚蠢”,然后再继续。更好的是auto main()->void
JOKE@40two我记得Kerrek的XML注释:)。显然,它没有什么问题,但与旧语法相比,它的击键次数更多。如果你觉得合适的话就使用它。我认为为保持一致性,对每个函数总是使用尾随返回类型是合理的。除了更多的输入,我看不出任何缺点。“如果所有函数都使用这种符号而不需要反求,你能想象你的代码库吗?”是的,我能。它在语法上更接近于设计良好的语言表达函数类型的方式。“你能想象(你的)代码库的外观吗”-我确实能。阅读起来会稍微愉快一些(特别是当返回复杂类型时),但这并不是一个巨大的改进,我不会与那些碰巧喜欢旧样式的人争论它。“要与异常规范、常量说明符和朋友混合”——说明符在->
之前,而friend
则在开头(“与旧的学校返回类型混合”)。没有任何东西与尾部返回类型“混合”。@NikosAthanasiou我建议您看看函数在数学中是如何表达的。和函数式编程语言。或者,基本上,在C语言家族之外的任何地方。我希望你能解释一下,为什么将返回类型放在末尾会是一件非常糟糕的事情。为什么它“与异常规范、常量说明符和朋友混合在一起”是件坏事