除了使用'extern'关键字:n3290草案之外,还有其他可能证明这一点吗?

use*_*747 8 c++ scope namespaces c++11

ISO草案N3290:不合格名称查询:第3.4.1节,第14段:

如果命名空间的变量成员在其命名空间的范围之外定义,则会查找成员定义中出现的任何名称(在declarator-id之后),就好像成员的定义出现在其名称空间中一样.

例如:

namespace N {
   int i = 4;
   extern int j;
}
int i = 2;
int N::j = i;       // N::j == 4
Run Code Online (Sandbox Code Playgroud)

除了使用'extern'关键字之外,还有其他可能证明这一点吗?

你可以提供一些其他的例子......除了extern

Naw*_*waz 4

另一个不使用extern关键字的示例:

//demo.cpp

int i = 100;
namespace N
{
    int i = 200;
    struct A
    {
        static int m;
    };
}

int N::A::m = i; //i is 100 or 200?

int main()
{
   cout << N::A::m << endl; //what will it print?
}
Run Code Online (Sandbox Code Playgroud)

输出:

200
Run Code Online (Sandbox Code Playgroud)

在线演示: http: //www.ideone.com/pRVAb