我能否在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语句,则效果是执行Run Code Online (Sandbox Code Playgroud)return 0;
措辞说,执行程序时的"效果"与存在时的效果相同,而return 0不是return声明将被添加到程序中(根据引用的段落会影响类型扣除).
编辑:
有一个缺陷报告(由Johannes Schaub提供):
拟议决议(2013年11月):
更改3.6.1 [basic.start.main]第2段如下:
实现不应预定义主函数.此功能不应过载.它应具有int类型的声明返回类型,否则其类型是实现定义的.
所有实现实现应允许两者
()返回int和的功能- 返回的(
int,指向指针的指针char)的函数int作为类型......