为什么这是一个错误?
int a = 0;
a = 42;
int main()
{
}
我可以找到这种行为的可能匹配:
(3.4.1 / 4)在全局范围内使用的名称,在任何函数,类之外 或用户声明的命名空间,应在全局使用之前声明 范围。
这可能是标准的缺陷吗?
答案 0 :(得分:7)
int a = 0; //it is a declaration (and definition too) statement
a = 42; //it is an assignment statement
第二行是错误原因,因为它是一个赋值语句。
在命名空间级别,只允许声明和定义语句。在命名空间级别不允许赋值语句。
并且“应在全局范围内使用之前声明”(来自规范的引用)表示以下内容:
int a = 42;
int b = 2 * a; //a is being used here
int c = a + b; //both a and b are being used here
如果您改为定义 type ,那么:
struct A {}; //definition of A
struct B { A a; }; //a is declared as member of B
//(which means, A is being "used")
void f(const A&, const B&); //both A and B are used in the declaration of f
答案 1 :(得分:1)
您无法在全局命名空间
中编写类似的赋值语句它需要在main或某些[member]函数中
int main()
{
a=42;
return 0;
}