Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 是';使用名称空间';在另一个相当于别名的命名空间中?_C++_Namespaces - Fatal编程技术网

C++ 是';使用名称空间';在另一个相当于别名的命名空间中?

C++ 是';使用名称空间';在另一个相当于别名的命名空间中?,c++,namespaces,C++,Namespaces,考虑以下两种说法: namespace foo = bar; 及 这两种说法是等价的,还是有一些细微的差别我不知道 (请注意,这不是一个关于编码风格的问题——我只是对C++解析感兴趣)。< p>当你将命名空间导入另一个时,那么,在这方面应该是相等的。但是,第二个还允许在其中放置其他代码,因此您也可以将不属于名称空间foo的内容放在其中。前者只是创建了一个别名 namespace foo=bar; 这不会影响任何名称查找规则。唯一的影响是使“foo”成为“bar”的别名。例如: namespa

考虑以下两种说法:

namespace foo = bar;

这两种说法是等价的,还是有一些细微的差别我不知道


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

< p>当你将命名空间导入另一个时,那么,在这方面应该是相等的。但是,第二个还允许在其中放置其他代码,因此您也可以将不属于名称空间foo的内容放在其中。前者只是创建了一个别名

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”,则不同的查找规则可能会导致在两个示例之间找到不同的名称。很抱歉,评论太晚,但我认为其他人可能正在搜索。usingnamespace-bar语句只将当时定义的内容带入foo名称空间。简言之,它可以创建错误的顺序依赖关系。参见萨特/Alexandrescu C++编码中的第59项Standards@RobL:using声明只引入当时声明的名称。以上是一个使用指令。前者类似于将名称从名称空间重新声明到当前范围。后者更像是一个查找规则,如果您在这里找不到它,请检查另一个名称空间。
namespace NS
{
  namespace bar
  {
  }

  namespace foo {
    using namespace bar;

    void f () {
      ++i;
    }
  }
}