繁体   English   中英

在匿名命名空间中使用命名空间是否安全?

[英]Is using namespace in an anonymous namespace safe?

匿名命名空间内的“using namespace”语句中 ,询问以下内容是否合法

//file.cpp
//....
namespace
{
    using namespace std;
}

int a(){
 cout << "bla";
}

答案是“它是”。 此外,使用命名空间指令通常被鄙视,即使插入cpp文件中也是如此,因为自引入统一构建( https://stackoverflow.com/a/6474774/484230 )以来,头文件和实现文件之间的范围差异并不稳固。

我的问题:匿名命名空间是否使我免于此类问题,或者using指令是否仍能传播文件边框? https://stackoverflow.com/a/2577890/484230中 ,提出了类似的方法。 它是否也适用于匿名命名空间,它是否真的安全? 当然std是个坏例子,但是例如using namespace boost::assign; 在一些cpp文件中会很方便。

将它放在匿名命名空间中并将其放在一个命名空间之间没有任何区别。 任何一个都产生相同的效果,这会将整个std命名空间带入文件的顶级命名空间。 这不好,应该避免。

至于“传播文件边界”,如果你把它放在匿名命名空间之外也不会这样做。 它唯一能够感染其他文件的是它是否在其他文件中包含#include d的文件中,例如标题。

我的问题:匿名命名空间是否使我免于此类问题,或者using指令是否仍能传播文件边框?

指令传播文件边框的唯一方法是,如果某个其他文件具有#include "file.cpp"预处理程序指令。 这也是完全合法的,但不管怎么说,这很糟糕。 包含源文件而不是标题非常违反标准做法。

仅仅因为某些事情是合法的并不意味着它是好的。

几乎是同样适用于使用using带来一些其他的命名空间到当前一个。 using namespace <name>; 即使在源文件中也被认为是不良形式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM