将自动退货类型扣除工作为主?

tem*_*boy 27 c++ c++14

我能否在C++ 1y(C++ 14)中为main函数执行以下操作:

auto main()
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)

int即使我们不需要使用显式,返回类型也会自动生成return 0;吗?

And*_*owl 23

不,这是不允许的.C++ 14标准草案N3690的第7.1.6.4/10段规定:

如果具有使用占位符类型的声明返回类型的函数没有return语句,则推断返回类型,就像return在函数体的右括号中没有操作数的语句一样.[...]

这意味着省略return语句main()将使其类型void.

第3.6.1/5段引入的关于流出结尾的特殊规则main()规定:

[...]如果控制到达结束而main没有遇到return语句,则效果是执行

return 0;
Run Code Online (Sandbox Code Playgroud)

措辞说,执行程序时的"效果"与存在时的效果相同,而return 0不是return声明将被添加到程序中(根据引用的段落会影响类型扣除).

编辑:

有一个缺陷报告(由Johannes Schaub提供):

拟议决议(2013年11月):

更改3.6.1 [basic.start.main]第2段如下:

实现不应预定义主函数.此功能不应过载.它应具有int类型的声明返回类型,否则其类型是实现定义的.所有实现 实现应允许两者

  • ()返回int和的功能
  • 返回的(int,指向指针的指针char)的函数int

作为类型......

  • 关于核心反射器的讨论,即使`main`包含*return-statement*返回`int`,也不允许这样做.`main`实际上是运行时中实体的重新声明,其**声明的**返回类型必须与该实体匹配. (5认同)
  • 但是将返回类型推断为"int"和"执行`return 0;`"的效果? (4认同)