繁体   English   中英

在另一个命名空间中使用“使用命名空间”等同于别名吗?

[英]Is 'using namespace' inside another namespace equivalent to an alias?

请考虑以下两个陈述:

namespace foo = bar;

namespace foo {
  using namespace bar;
}

这两个陈述是等同的,还是有一些我不知道的微妙差异?

(请注意,这不是关于编码风格的问题 - 我只对C ++解析感兴趣)。

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'。

在将名称空间导入另一个名称空间时,是的,在这方面它应该是相同的。 但是,第二个也允许放入其他代码,因此您也可以将属于命名空间foo的内容放在其中。 前者只是创建一个别名。

暂无
暂无

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

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