我们如何在创建它的文件之外访问未命名的命名空间?
How can we access an unnamed namespace outside the file it is created in?
我正在网上阅读有关命名空间的内容,并阅读了有关未命名命名空间的内容。我读到未命名的名称空间只能在创建它们的文件中访问。但是当我自己尝试时,它并没有那样工作。这怎么可能?
这是我所做的:
文件 1:
#include <iostream>
using namespace std;
namespace space1 {
int a = 10;
void f() {
cout << "in space1 of code 1" << endl;
};
}
namespace {
int x = 20;
void f() {
cout << "in unnamed space" << endl;
}
}
file2:我从 file1
访问命名空间的地方
#include <iostream>
#include "code1.cpp"
using namespace std;
int main() {
space1::f();
cout << space1::a;
cout << x << endl;
f();
return 0;
}
Can we access the unnamed namespaces outside the file they were created?
取决于您指的是哪个“文件”。如果您引用头文件,那么是的,您可以在外部访问未命名的命名空间,因为未命名的命名空间可用于包含头文件的整个翻译单元。
如果您引用整个翻译单元,则不可以,无法从其他翻译单元访问未命名的命名空间。
您读到未命名的命名空间仅限于创建它的 文件。那不是真的。它仅限于创建它的翻译单元。
在预处理器阶段,您在 file2
中的 #include "code1.cpp"
语句将 code1.cpp
的所有代码带入 file2
的代码中。因此,当 file2
被编译时,两个代码都是同一个翻译单元的一部分,这就是 code1.cpp
中的未命名命名空间可被 file2
的代码访问的原因。
我正在网上阅读有关命名空间的内容,并阅读了有关未命名命名空间的内容。我读到未命名的名称空间只能在创建它们的文件中访问。但是当我自己尝试时,它并没有那样工作。这怎么可能?
这是我所做的:
文件 1:
#include <iostream>
using namespace std;
namespace space1 {
int a = 10;
void f() {
cout << "in space1 of code 1" << endl;
};
}
namespace {
int x = 20;
void f() {
cout << "in unnamed space" << endl;
}
}
file2:我从 file1
访问命名空间的地方#include <iostream>
#include "code1.cpp"
using namespace std;
int main() {
space1::f();
cout << space1::a;
cout << x << endl;
f();
return 0;
}
Can we access the unnamed namespaces outside the file they were created?
取决于您指的是哪个“文件”。如果您引用头文件,那么是的,您可以在外部访问未命名的命名空间,因为未命名的命名空间可用于包含头文件的整个翻译单元。
如果您引用整个翻译单元,则不可以,无法从其他翻译单元访问未命名的命名空间。
您读到未命名的命名空间仅限于创建它的 文件。那不是真的。它仅限于创建它的翻译单元。
在预处理器阶段,您在 file2
中的 #include "code1.cpp"
语句将 code1.cpp
的所有代码带入 file2
的代码中。因此,当 file2
被编译时,两个代码都是同一个翻译单元的一部分,这就是 code1.cpp
中的未命名命名空间可被 file2
的代码访问的原因。