【发布时间】:2016-05-24 07:57:07
【问题描述】:
标准是否允许以下内容?
#include <iostream>
extern int a;
auto a = 3;
int main(int, char**)
{
std::cout << a << std::endl;
return 0;
}
【问题讨论】:
-
这肯定是一个 g++ 错误
-
此代码在 MS Visual Studio 2012 中也会导致错误,提示为
error C2371: 'a' : redefinition; different basic types。 -
怎么样:
extern int a; decltype(a) a;;) -
@Ajay 应该没问题。偶数:extern int a; decltype(a) a = 42;
-
它将被 [basic.link]/10 "在所有类型调整后(在此期间 typedefs (7.1.3) 被其定义替换),所有声明指定的类型都引用给定的变量或函数应相同," .似乎很难争辩
auto为a指定了与int不同的类型,但即使您确实争辩说,我也很有信心说,目的是让这段代码合法
标签: c++ c++11 language-lawyer extern auto