考虑以下两个陈述:
namespace foo = bar;
和
namespace foo {
using namespace bar;
}
这两个陈述是否相同,或者是否存在一些我不知道的细微差别?
(请注意,这不是关于编码风格的问题 - 我只对C ++解析感兴趣。)
答案 0 :(得分:16)
namespace foo=bar;
这不会影响任何名称查找规则。唯一的影响是让'foo'成为'bar'的别名。例如:
namespace bar
{
void b();
}
void f () {
bar::b (); // Call 'b' in bar
foo::b (); // 'foo' is an alias to 'bar' so calls same function
}
以下内容确实会更改查找规则
namespace NS
{
namespace bar
{
}
namespace foo {
using namespace bar;
void f () {
++i;
}
}
}
当'i'进行查找时,首先搜索'foo',然后搜索'NS'然后搜索'bar'。
答案 1 :(得分:2)
当您将名称空间导入另一个名称空间时,是的,在这方面它应该是相同的。但是,第二个也允许放入其他代码,因此您也可以在其中放置不命名空间foo的一部分。前者只是创建一个别名。