【发布时间】:2016-09-08 00:32:09
【问题描述】:
我在公司到处都能看到这样的代码:
namespace {
const MAX_LIMIT = 50;
const std::string TOKEN = "Token";
}
我很困惑为什么你需要一个匿名命名空间。一方面,您需要 MAX_LIMIT 和 TOKEN 的本地翻译单元。但是由于const,这已经在没有匿名命名空间的情况下实现了。 static const 和简单的const 都实现了本地翻译单元。
另一方面,如果您的文件中某处有一个名称相同的变量,则不会发生命名冲突。
int foo()
{
std::string TOKEN = "MyToken"; // Clash! ::TOKEN vs TOKEN can be used.
}
这将证明匿名命名空间是合理的。但是,您多久需要在函数中使用一个实际上已经被在函数外部声明的const 变量占用的变量名?我的答案是永远不会。所以在实践中,对我来说,不需要未命名的命名空间。有什么提示吗?
【问题讨论】:
-
我想说的是一致性:这条
const规则只适用于整数类型。 -
@Quentin 嗯?命名空间范围内的
const具有内部链接,除非标记为extern,适用于所有类型 -
@M.M 我的错!我不知道我从哪里回忆起来的,但我也很确定。至少我并不孤单:D
-
一致性。我怀疑贵公司的编码标准中有几点对于编译器来说是完全不必要的,但对人类很有用。
-
那么如果简单的 const 有内部链接,那么为什么有人会创建一个变量 static const ?简单的const和静态的const没有区别吗?
标签: c++ namespaces anonymous unnamed-namespace