【发布时间】:2015-02-06 15:55:48
【问题描述】:
N3936 [basic.start.main]
2实现不应预定义main函数。这 函数不得重载。它应该有一个声明的返回类型 类型为int,但除此之外它的类型是实现定义的。一个 实施应允许两者——
()的函数返回int和——(
int, 指向char的指针的函数) 返回int
5main中的return语句具有离开main的效果 功能(销毁具有自动存储持续时间的任何对象)和 以返回值作为参数调用std::exit。如果控制 在没有遇到 return 语句的情况下到达 main 的末尾, 效果就是执行return 0;
DR 1669 在措辞中添加了 declared 一词,这意味着如果要将 main 声明为 auto,则需要尾随返回类型。然而,DR 1003 引入的措辞说,正如上面引用的那样,“一个实现应允许 ... 返回 int 的功能 ...” main 的声明应该是这样的。
因此,鉴于auto 的规则,隐含的return 0; 足以使
auto main() { }
合法吗?
【问题讨论】:
-
缺陷报告的重点是澄清这部分标准。询问 pre-DR 标准的含义是没有用的,因为委员会已经意识到该标准不够清晰,并将对其进行更改。
-
@SebastianRedl 更改已经出现在 N3936 中,但是?
-
正如@Sebastian 所说,请记住,稍后的缺陷报告会纠正(感知)标准中的缺陷(内容和/或表示),或使其符合新特性。或者,他们可能会引入新功能,但这里并非如此。所以,后来的 DR 让它变得明确。
-
@2pacisstillalive 我不确定你的意思。 DR 1669 及时进入 C++14,这就是为什么它的状态被列为“C++14”,不是吗?也就是说,C++14标准有“声明”二字,
auto main() { }绝对不是有效的C++14。 -
@hvd 好的,我现在明白了 :(
标签: c++ language-lawyer c++14