c ++使用命名空间'的正确位置

时间:2015-10-19 16:41:55

标签: c++ namespaces

我在一些人中集成了一些C ++,发现我们采用了两种 有关使用使用命名空间命令的不同策略。

为了清洁源代码,两者中哪一个是最正确的解决方案?

namespace foo
{
   using namespace bar;
}

using namespace bar;

namespace foo
{
}

非常感谢你的帮助,

吨。

2 个答案:

答案 0 :(得分:7)

这两者并不相同。在第一种情况下,名称空间bar将在名称空间foo中导入,因此对于每个bar::x,您可以将其作为foo::x进行访问。在后者中,名称空间bar被导入全局名称空间(或包装它们的名称空间),并且可以作为::x访问。

我建议您始终为您选择最窄的解决方案。即使只是在您实际需要它的函数中包含命名空间。所以,如果你有疑问,请选择第一个。

答案 1 :(得分:0)

这个问题已经回答了,但我想重申Toby Speight提出的观点。  永远不要写using namespace bar之类的东西。

良好做法是使用using作为长/层次namespaces的别名辅助。像

using po = boost::program_options;

然后使用

po.notify(vm);

有问题的两个备选方案中的任何一个仅适用于讨论或访谈。