gpt4 book ai didi

c++ - 未命名的命名空间与全局声明

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:31:37 36 4
gpt4 key购买 nike

使用无名命名空间和全局声明有什么区别?
使用这两个有什么特定的上下文吗?
我们可以访问外部源文件中未命名的命名空间组件吗?

最佳答案

未命名命名空间的要点是在翻译单元(= 源文件)内提供一个唯一的命名空间,而不需要显式前缀。这允许您保证您的全局名称不会与其他翻译单元中的其他相同的全局名称冲突。

例如:

// file1.cpp

namespace
{
void foo() { /* ... */ }
}

#include "bar.h"

int do_stuff()
{
foo();
bar();
return 5;
}

// file2.cpp

namespace
{
void foo() { /* ... */ }
}

#include "bar.h"

int do_something else()
{
bar();
foo();
return 12;
}

您可以将这两个翻译单元链接在一起,并且可以肯定地知道这两个名称 foo 将引用各自文件中定义的函数,并且您没有违反单一定义规则。

从技术上讲,您可以将未命名的命名空间想象成这样:

namespace unique_and_unknowable_name
{
// ...
}

using namespace unique_and_unknowable_name;

如果没有此工具,您可以保证不违反 ODR 的唯一方法是使用 static 声明。但是,存在细微差别,static 会影响链接,而 namespace 不会。

关于c++ - 未命名的命名空间与全局声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18240146/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com