【发布时间】:2015-02-06 15:26:08
【问题描述】:
N3936 [basic.start.main]
2实现不应预定义main函数。这 函数不得重载。它应该有一个声明的返回类型 类型为int,否则它的类型是实现定义的。一个 实施应允许两者——
()的函数返回int和——(
int, 指向char的指针的函数) 返回int
N3337 [basic.start.main]
2实现不应预定义main函数。这 函数不得重载。它应具有类型的返回类型int,否则它的类型是实现定义的。全部 实现应允许以下两个定义main:int main() { /* ... */ }和
int main(int argc, char* argv[]) { /* ... */ }
是什么解释了这种变化?我能找到的最接近的是DR 1669,其中提议的措辞已经包含此更改。我们知道,由于“数组到指针衰减”,char* argv[] 变为 char** argv。
std::cout << std::is_same<char**, std::decay<char*[]>::type>::value; // true
这并不需要重新措辞 - 它是不言自明的。那为什么要改变呢?
【问题讨论】:
标签: c++ language-lawyer c++14