在 C++ 中,将函数或变量放入匿名命名空间会使其内部链接,即。 e.与在文件级别声明它 static
相同,但惯用 C++。
普通命名空间中的匿名命名空间呢?它仍然保证内部链接吗?
// foo.cpp
void func1() {
// external linkage
}
static void func2() {
// internal linkage
}
namespace {
void func3() {
// internal linkage
}
}
namespace ns1 {
void func4() {
// external linkage
}
namespace {
void func3() {
// still internal linkage?
}
}
}
最佳答案
匿名命名空间中的实体不一定具有内部链接;他们实际上可能有外部联系。
由于未命名的命名空间的名称对于编译它的翻译单元来说是唯一的,所以您不能从该翻译单元之外引用其中声明的实体,无论它们的链接是什么。
C++ 标准说(C++03 7.3.1.1/note 82):
Although entities in an unnamed namespace might have external linkage, they are effectively qualified by a name unique to their translation unit and therefore can never be seen from any other translation unit.
关于c++ - 常规命名空间内匿名命名空间内的符号链接(symbolic link),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4181059/