C++ 自动退货类型扣减是否适用于main?

C++ 自动退货类型扣减是否适用于main?,c++,c++14,C++,C++14,对于C++1y(C++14)中的主函数,我是否能够执行以下操作: 因此,返回类型将自动为int,即使我们不需要使用显式返回0?不,这是不允许的。C++14标准草案N3690第7.1.6.4/10段规定: 如果使用占位符类型的声明返回类型的函数没有return语句,则返回 类型是从函数的右括号中没有操作数的return语句推导出来的 身体。[……] 这意味着在main()中省略return语句将使其类型void 第3.6.1/5段介绍的关于从main()末尾流出的特殊规则规定: […]如果控件到达

对于C++1y(C++14)中的主函数,我是否能够执行以下操作:


因此,返回类型将自动为
int
,即使我们不需要使用显式
返回0

不,这是不允许的。C++14标准草案N3690第7.1.6.4/10段规定:

如果使用占位符类型的声明返回类型的函数没有
return
语句,则返回 类型是从函数的右括号中没有操作数的
return
语句推导出来的 身体。[……]

这意味着在
main()
中省略
return
语句将使其类型
void

第3.6.1/5段介绍的关于从
main()
末尾流出的特殊规则规定:

[…]如果控件到达末尾 如果
main
没有遇到
return
语句,其效果就是执行

return 0;
措辞表明,程序执行期间的“效果”与存在
return 0
时的效果相同,而不是将
return
语句添加到程序中(根据引用的段落,这将影响类型推断)

编辑:

对于这个()有一个简单的定义:

拟议决议(2013年11月):

将3.6.1[基本启动主]第2段更改如下:

实现不应预定义主要功能。此功能不应过载。它应该有一个声明的返回类型int,否则它的类型是实现定义的。所有实施一个实施应同时允许

  • ()
    返回
    int
  • 函数(
    int
    ,指针指向
    char
    )返回
    int
作为类型


这不是一个“你实际上面临的实际问题”,或者是吗?@DanielFischer,谁在乎呢?这是一个有趣(无用)的边缘案例。为什么
auto
int
长一个字母。编译器编写者必须为此编写特殊规则。他们为什么要这样做?@DavidHeffernan他们必须为隐式
返回0编写一个特殊规则int
是“执行
返回0的效果;
”?@BenVoigt:好的,效果不是“添加
返回0
”,7.1.6.4/10指定“如果使用占位符类型的声明返回类型的函数没有返回语句[…]”。从
main
结尾流出并不会添加
return
语句,因此句子的其余部分应该应用,并且返回类型应该推断为
void
您是说“执行的效果”意味着不会发生编译时效果吗?这种概念上的区别真的存在吗?我很难相信。啊,我明白了。我想可以这样理解。但并非如此,一些优秀的开发人员发布了一份关于此的问题报告,以澄清此处的规范。根据对core reflector的讨论,即使
main
包含返回
int
的返回语句,这也是不允许的
main实际上是运行时中实体的重新声明,其声明的返回类型必须与该实体匹配。
return 0;