C++中的多个名称空间声明

Rob*_*son 17 c++ scope namespaces

替换这样的东西是合法的:

namespace foo {
   namespace bar {
      baz();
   }
}
Run Code Online (Sandbox Code Playgroud)

用这样的东西:

namespace foo::bar {
   baz();
}
Run Code Online (Sandbox Code Playgroud)

ski*_*ear 37

您可以将名称空间组合成一个名称并使用新名称(即Foobar).

namespace Foo { namespace Bar {
    void some_func() {
        printf("Hello World.");
    }
}}

namespace Foobar = Foo::Bar;

int main()
{
    Foobar::some_func();
}
Run Code Online (Sandbox Code Playgroud)

  • 另一个不必要的,混乱的功能. (4认同)

NuS*_*ler 14

不,这不对.而不是一堆缩进的嵌套命名空间,将它们放在同一行上当然是有效的:

namespace Foo { namespace Bar { namespace YetAnother {
    // do something fancy
} } } // end Foo::Bar::YetAnother namespace
Run Code Online (Sandbox Code Playgroud)

更新:

您现在可以在C++ 17中更清晰地嵌套名称空间:

namespace Foo::Bar::YetAnother {
  // do something even fancier!
}
Run Code Online (Sandbox Code Playgroud)


Adi*_*ter 6

对于任何想知道的人,namespace foo::bar从C++ 17开始支持该表单.参考文献:


AnT*_*AnT 5

something::someting_elseC++中的限定名称只能用于引用之前已声明过的实体.您不能使用此类名称来介绍以前未知的内容.即使之前已经声明了嵌套命名空间,扩展该命名空间也被视为"引入新内容",因此不允许使用限定名称.

您可以使用此类名称来定义先前在命名空间中声明的函数

namespace foo {
  namespace bar {
    int baz();
  }
}

// Define
int foo::bar::baz() {
  /* ... */
}
Run Code Online (Sandbox Code Playgroud)

但没有声明扩展现有命名空间的新命名空间.