misc-use-anonymous-namespace¶
查找在全局作用域声明的 static
函数或变量的实例,这些实例可以移入匿名命名空间。
根据 C++ 标准,匿名命名空间是“更优的选择”。static
曾经被提议弃用,但后来取消了弃用,以保持 C 兼容性 [1]。static
是一个在不同上下文中具有不同含义的重载术语,因此可能会造成混淆。
以下 static
的用法将不会被诊断
头文件中的函数或变量,因为在头文件中使用匿名命名空间被认为是一种反模式。允许的头文件扩展可以通过全局选项 HeaderFileExtensions 配置。
const
或constexpr
变量,因为它们在 C++ 中已经具有隐式内部链接。
示例
// Bad
static void foo();
static int x;
// Good
namespace {
void foo();
int x;
} // namespace
[1] 取消弃用 static