【发布时间】:2012-05-02 15:37:18
【问题描述】:
在"using namespace" statement inside an anonymous namespace被问到以下是否合法
//file.cpp
//....
namespace
{
using namespace std;
}
int a(){
cout << "bla";
}
答案是“它是”。此外,即使将命名空间指令插入到 cpp 文件中,通常也会鄙视使用命名空间指令,因为自从引入统一构建 (https://stackoverflow.com/a/6474774/484230) 以来,头文件和实现文件之间的范围差异并不是坚如磐石。
我的问题:
匿名命名空间是否可以使我免于此类问题,或者可以使用
指令仍然传播文件边界?
在https://stackoverflow.com/a/2577890/484230 中提出了类似的方法。它也适用于匿名命名空间吗?它真的安全吗?
当然std 是一个不好的例子,但是例如using namespace boost::assign; 在某些 cpp 文件中会非常方便。
【问题讨论】:
-
namespace assign = boost::assign更安全。我只使用using namespace将用户定义的文字带入作用域,因为没有其他选择。 -
@R.MartinhoFernandes: 使用 boost::assign 简写不会给你带来任何好处,因为命名空间包含了容器的 += 等运算符。因此,您必须将 using 放在某个地方,但不可否认,功能范围更好。
标签: c++ namespaces using-directives