我能否对 C++1y (C++14) 中的主要功能执行以下操作:
auto main()
{
// ...
}
那么int
即使我们不需要使用显式,返回类型是否会自动出现return 0;
?
不,不允许。C++14 标准草案 N3690 的第 7.1.6.4/10 段规定:
如果具有使用占位符类型的已声明返回类型的函数没有语句,则返回类型是从函数体右大括号处没有操作数
return
的语句推导出来的。return
[...]
这意味着省略一个return
语句 inmain()
会使它的 type void
。
第 3.6.1/5 段引入的关于从末端流出的特殊规则main()
规定:
main
[...]如果控制在没有遇到语句的情况下到达末尾return
,效果就是执行return 0;
措辞说执行期间的“效果”期间的“效果”与存在a 一样return 0
,而不是将return
语句添加到程序中(这将影响根据引用段落的类型推导)。
编辑:
有一个缺陷报告(由 Johannes Schaub 提供):
提议的决议(2013 年 11 月):
将 3.6.1 [basic.start.main] 第 2 段更改如下:
实现不应预定义主要功能。该功能不得重载。它应该有一个声明的 int 类型的返回类型,否则它的类型是实现定义的。
所有实现一个实现应允许两者
()
返回函数int
和- (
int
, 指向char
) 的指针的函数返回int
作为类型...