具有内部链接的命名空间

Named namespace with internal linkage

[@PasserBy 发现我的问题是重复的。问题可以关闭了,谢谢。]

如何获得具有内部链接的命名空间?也就是说,如何获得对外部源文件不可见的命名空间?我想要这个:

static namespace N {
    int foo() {return 10;}
    int bar() {return 20;}
}

然而,不幸的是,C++ 无法识别 static namespace

在未命名的命名空间中包含命名的命名空间:

namespace {
    namespace N {
        int foo() {return 10;}
        int bar() {return 20;}
    }
}

int sum()
{
    return N::foo() + N::bar();
}

这是可行的,因为未命名的命名空间会自动将其成员(在本例中是命名空间 N 的唯一成员)导出到周围的范围,而不会将成员暴露给其他源文件。