c++ - 常规命名空间内匿名命名空间内的符号链接(symbolic link)

标签 c++ namespaces anonymous linkage

在 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/

相关文章:

android - Android 上的 cocos2d-x 屏幕闪烁

c++ - sizeof - 将指针转换为数组

c++ - 对 boost::system 的 undefined reference

c# - 如何确定命名空间位于哪个程序集中?

c# - 什么是局部变量(在 CountdownEvent 类的 MSDN 代码示例中)?

c# - 取消订阅匿名委托(delegate)事件

C++ std::regex 文字管道错误转义异常

c++ - 在 C++ 中检测命名空间

c# - "using"命名空间声明中的语句位置

java - 具有匿名类型构造函数的对象类