我能否在C ++ 1y(C ++ 14)中对main函数执行以下操作:
auto main()
{
// ...
}
即使我们不需要使用显式的int
,返回类型也会自动为return 0;
吗?
答案 0 :(得分:23)
不,不允许这样做。 C ++ 14标准草案N3690的第7.1.6.4/10段规定:
如果具有声明的返回类型且使用占位符类型的函数没有
return
语句,则返回 类型是从return
语句推导出来的,在函数的右大括号中没有操作数 身体。 [...]
这意味着在return
中省略main()
语句会使其类型为void
。
第3.6.1 / 5段引入的关于流出main()
末尾的特殊规则指明:
[...]如果控制到达终点
main
没有遇到return
语句,效果就是执行return 0;
措辞说明程序执行期间的“效果”与return 0
存在时的“效果”相同,而不是添加return
语句程序(根据引用的段落影响类型扣除)。
修改强>
此Defect Report)courtesy of Johannes Schaub:
提议的决议(2013年11月):
更改3.6.1 [basic.start.main]第2段如下:
实现不应预定义主函数。此功能不应过载。它应具有类型为int的声明的返回类型,否则其类型是实现定义的。
所有实施实施应允许两者
- 的函数
()
返回int
和- 返回
的函数(int
char
,指向int
的指针)作为类型...