C++ 自动退货类型扣减是否适用于main?
对于C++1y(C++14)中的主函数,我是否能够执行以下操作: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()末尾流出的特殊规则规定: […]如果控件到达
因此,返回类型将自动为
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;