我一直在长时间使用static
关键字来定义内部链接。后来,我转向使用匿名命名空间封装本地事物的C++风格。匿名命名空间:他们真的很棒吗?
但是,现在当我使用匿名命名空间多年的时候,我开始认为static
关键字更易于使用!
一个常见的问题是,我有这样的模式:
namespace {
// ...five pages of code...
} // namespace
要查看某个函数内部或外部的联系,我现在必须滚动了很多,而不是旧的C风格,我可以检查前面的功能/对象是否有static
。
我知道有一些事情匿名命名空间可以做到这一点static
不能隐藏typedefs - 但个人而言,我并不是真的对此非常感兴趣。
你对此有何看法?匿名命名空间的胜利是否值得降低可读性?或者我都出错了?
命名空间范围内的`static`函数已被弃用,这是不使用它们的充分理由。 anon命名空间中的函数具有`static`的所有优点,除了它们具有外部链接。后者我认为已经由编译器处理,从导出的部分中删除匿名命名空间中定义的名称。 – 2010-12-22 21:58:04
@实际上,静态函数永远不会被弃用。弃用仅针对* objects *。但是,在n3225中已经取消了弃用:在C++ 0x中,不再推荐使用它来为对象或函数提供内部链接。另一个区别是未命名的名称空间会保留外部链接:未命名的名称空间及其内容将在C++ 0x中获得内部链接。所以在static-way和namespace-way之间似乎没有任何区别,除了namespace-way将允许诸如`namespace {int a; } int a;`。 – 2010-12-22 22:09:27