101*_*010 10 c++ program-entry-point c++11 c++14
在下面的代码示例中,main函数是使用C++ 11尾部返回类型表示法编写的:
auto main() -> int {
//...
return 0;
}
Run Code Online (Sandbox Code Playgroud)
题:
是否main应该避免使用尾随返回类型并且应该首选经典符号?
Ali*_*Ali 13
首先,让我们看看为什么你想要一般使用尾随返回类型.
尾随返回类型是一种专用语言功能,对于通用库编写者(即通用库的编写者,而不是通常编写库的通用个性)非常有用,类似于decltype.顺便提一下,两种语言特性在模糊或长lambda表达式中也有一些限制,但它们不应该在"普通"用户代码上大量使用.
来自DietmarKühl的回答(你在之前的问题中已经链接过,所以你必须阅读它):
尾随返回类型的重要性主要用于函数模板,现在可以使用函数的参数
decltype()来确定返回类型.例如:Run Code Online (Sandbox Code Playgroud)template <typename M, typename N> auto multiply(M const& m, N const& n) -> decltype(m * n);这声明函数
multiply()返回由生成的类型m * n.decltype()在前面使用multiply()将是无效的,因为m并且n尚未宣布.
我认为Kerrek SB和DietmarKühlC++专家都认为他们的指导方针很好.现在让我们看看上述指南如何适用int main().一些观察:
int main() 不是功能模板.int)在可预见的未来不会改变; 我们可以安全地承诺这种类型.是否应该避免使用尾随返回类型的主要原因并且应该首选经典表示法?
是:
它使那些不熟悉新语法的开发人员感到困惑.
并非所有工具都支持此新语言功能.
如上所述,使用此功能是不必要的int main().
我休息一下.
这很愚蠢.
没有收获,没有必要或没有理由写这样的东西.
要迂腐,你无缘无故地添加auto和->符号.
尾部返回类型通常用于在引入函数参数后推断返回类型.在这里你已经知道了返回类型.
如果你的所有函数都使用这种表示法而不需要这样做,你能想象你的代码库吗?你几乎可以保留前面的所有存储,相关规范,静态等,并在最后留下返回类型,与异常规范,const说明符和朋友混在一起?
你不需要说服我的人.我不反对尾随返回类型 ; 我反对使用功能的"暴动"的心态,在那里不需要这样做,并担心C++会变成一大堆风格并在自身的重压下崩溃.
轻松的规范变化是不稳定和缺乏沟通的迹象.像Python的PEP8这样的功能是一件好事,训练有素的眼睛应该谨慎丢弃.
| 归档时间: |
|
| 查看次数: |
752 次 |
| 最近记录: |