对于许多问题,答案似乎可以在"标准"中找到.但是,我们在哪里找到它?最好是在线.
谷歌搜索有时会觉得徒劳,尤其是对于C标准,因为他们在编程论坛的大量讨论中被淹没.
要开始这个,因为这些是我现在正在搜索的,那里有很好的在线资源:
正如预期的那样,C++ 11中的以下内容失败,因为该语言没有bog标准函数的返回类型推导:
auto main()
{
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但是,C++ 14确实如此,所以我无法解释以下错误(在GCC trunk,clang 3.8和Visual Studio 2015中具有相同的结果):
error: 'main' must return 'int'
Run Code Online (Sandbox Code Playgroud)
我没有看到标准中的一个段落,禁止返回类型扣除main?或者两个编译器都不兼容?
(对于它的价值,我永远不会真的这样做.int main()为了胜利......)
GCC,clang和VS2013编译下面的代码:
namespace A{}
int main()
{
int A;
}
Run Code Online (Sandbox Code Playgroud)
但[namespace.alias]/4表示如下:
一个命名空间名称或命名空间别名不得申报为同一任何其他实体的名称声明区.
和
[basic.scope.declarative]/1说:
每个名称都在程序文本的某些部分中引入,称为 声明性区域,该声明区域是该名称有效的程序的最大部分,也就是说,该名称可以用作非限定名称以引用同一实体.
也就是说,我的印象是int变量in main()不能与命名空间同名A.注意到[basic.scope.declarative]/2中的例子似乎证实了这一点
第一个j 的声明区域包括整个示例.