27 November 2023

C++ 核心指南目录

“Use an unnamed (anonymous) namespace for all internal/non-exported entities”

理由

外部程序不该依赖于嵌套的匿名 namespace 中的实体。考虑把具体实现的代码文件中用到的定义放到匿名 namespace,除非某个实例需要导出供外部使用。

坏例子

static int f();
int g();
static bool h();
int k();

好例子

namespace {
    int f();
    bool h();
}
int g();
int k();

例子

API 类和成员不能放在匿名 namespace;但是定义在具体实现的代码文件中的辅助类和函数应当放在匿名 namespace 范围