27

我能否对 C++1y (C++14) 中的主要功能执行以下操作:

auto main()
{
    // ...
}

那么int即使我们不需要使用显式,返回类型是否会自动出现return 0;

4

1 回答 1

23

不,不允许。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

作为类型...

于 2013-06-16T15:56:50.287 回答