Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 是否应避免使用带有尾部返回类型的main?_C++_C++11_Main_C++14 - Fatal编程技术网

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
    )在可预见的未来不会改变;我们可以放心地使用这种类型
是否有任何理由认为应避免使用带尾随返回类型的main,而应首选经典表示法

是的:

  • 这让那些不熟悉新技术的开发人员感到困惑 语法

  • 并非所有工具都支持这种新的语言功能

  • 如上所述,
    int main()
    不需要使用此功能


  • 我的问题到此为止。

    有意思的问题,但这有实际需要吗?我想不出有什么缺点,但同样,我也看不出有什么实际用途;-)
    int main()
    越短越好。另外,(尽管不相关)
    返回0
    可以在
    main
    中省略。为什么您希望这个问题会出现?我个人的看法是,我们都受过训练,下意识地将
    intmain()
    模式匹配为无害的东西。但是,每当我看到
    auto main()->int
    时,我都会对它再看一眼,哪怕只是想“多么愚蠢”,然后再继续。更好的是
    auto main()->void
    JOKE@40two我记得Kerrek的XML注释:)。显然,它没有什么问题,但与旧语法相比,它的击键次数更多。如果你觉得合适的话就使用它。我认为为保持一致性,对每个函数总是使用尾随返回类型是合理的。除了更多的输入,我看不出任何缺点。“如果所有函数都使用这种符号而不需要反求,你能想象你的代码库吗?”是的,我能。它在语法上更接近于设计良好的语言表达函数类型的方式。“你能想象(你的)代码库的外观吗”-我确实能。阅读起来会稍微愉快一些(特别是当返回复杂类型时),但这并不是一个巨大的改进,我不会与那些碰巧喜欢旧样式的人争论它。“要与异常规范、常量说明符和朋友混合”——说明符在
    ->
    之前,而
    friend
    则在开头(“与旧的学校返回类型混合”)。没有任何东西与尾部返回类型“混合”。@NikosAthanasiou我建议您看看函数在数学中是如何表达的。和函数式编程语言。或者,基本上,在C语言家族之外的任何地方。我希望你能解释一下,为什么将返回类型放在末尾会是一件非常糟糕的事情。为什么它“与异常规范、常量说明符和朋友混合在一起”是件坏事