将自动退货类型扣除工作为主?

时间:2013-06-16 15:45:22

标签: c++ c++14

我能否在C ++ 1y(C ++ 14)中对main函数执行以下操作:

auto main()
{
    // ...
}

即使我们不需要使用显式的int,返回类型也会自动为return 0;吗?

1 个答案:

答案 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 Reportcourtesy of Johannes Schaub

  

提议的决议(2013年11月):

     

更改3.6.1 [basic.start.main]第2段如下:

     

实现不应预定义主函数。此功能不应过载。它应具有类型为int的声明的返回类型,否则其类型是实现定义的。 所有实施 实施应允许两者

     
      
  • ()返回int
  • 的函数   
  • 返回int
  • 的函数(char,指向int的指针)   
     

作为类型...