我一直在使用static
关键字时间较长,用于定义内部链接。后来,我改用 C++ 风格,将本地事物包装在匿名命名空间中。
然而,现在当我使用匿名命名空间多年后,我开始认为static
关键字更容易使用!
一个常见的问题是我有这样的模式:
namespace {
// ...five pages of code...
} // namespace
要查看某个函数是否具有内部或外部链接,我现在必须滚动很多次,而不是旧的 C 风格,在旧的 C 风格中我可以只检查函数/对象是否具有static
在它前面。
我知道匿名命名空间可以做一些事情static
不能 - 隐藏 typedefs - 但无论如何,我个人对此并不是很感兴趣。
您对此有何看法?匿名名称空间的胜利是否足以导致可读性下降?还是我完全错了?
如果你的命名空间中的代码太长,没有什么可以阻止你这样做:
namespace {
int foo(char* x) {
return x[0] + x[1];
}
}
namespace {
int bar(char *x, char *y) {
return foo(x) + foo(y);
}
}
在 C++03 中,使用未命名命名空间的实际优势恰恰在于内容具有external链接(但在 TU 之外仍然不可见,因为无法引用它们)。模板参数不能有内部链接:
namespace {
int foo(const char* x) {
return x[0] + x[1];
}
}
static int foo2(const char *x) {
return x[0] + x[1];
}
template <int (*F)(const char*)>
void baz(const char *p) {
F(p);
}
int main() {
baz<foo>("ab"); // OK
baz<foo2>("ab"); // not valid
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)