gpt4 book ai didi

c++ - 匿名命名空间 : Are they really that great?

转载 作者:IT老高 更新时间:2023-10-28 22:19:33 27 4
gpt4 key购买 nike

我一直在使用 static 关键字来定义内部链接。后来,我改用 C++ 风格,将本地事物包装在匿名命名空间中。

然而,当我使用匿名命名空间多年后,我开始认为 static 关键字更容易使用!

一个常见的问题是我有这个模式:

namespace {
// ...five pages of code...
} // namespace

要查看某个函数是否具有内部或外部链接,我现在必须滚动很多次,而不是旧的 C 样式,我可以只检查函数/对象是否有 static前面。

我知道匿名命名空间有一些 static 无法做到的事情 - 隐藏 typedef - 但我个人对此并不是很感兴趣。

您对此有何看法?匿名命名空间的胜利是否足以保证降低可读性?还是我都错了?

最佳答案

如果你的命名空间中的代码太长,没有什么可以阻止你这样做:

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
}

关于c++ - 匿名命名空间 : Are they really that great?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4514008/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com