以下内容在 C++14 中有效吗?
auto main()
{
// ...
}
即使我们不需要使用显式的
int
,返回类型是否会推导为 return 0;
?
不,这是不允许的。 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
语句(这会影响根据类型推导)引用的段落)。
编辑:
为此有一份缺陷报告(由 Johannes Schaub 提供):
拟议决议(2013 年 11 月):
将 3.6.1 [basic.start.main] 第 2 段更改如下:
实现不应预定义主函数。该函数不得超载。它应具有 int 类型的声明返回类型,但除此之外,其类型是实现定义的。
所有实现实现应允许两者
- 的函数
返回()
和int
- (
,指向int
的指针)的函数返回char
int
作为类型...