【问题标题】:Multiple Namespaces in a single line in C++C++ 单行中的多个命名空间
【发布时间】:2021-09-24 08:43:55
【问题描述】:

我有一个疑问要问。

在 C++ 中,一行中的多个命名空间是指什么?

例如:

#include<iostream>
#include<conio>

using namespace university::project::work ; 

任何帮助将不胜感激!

提前致谢!

【问题讨论】:

  • 这些是嵌套的命名空间
  • @RoQuOTriX 它们是否像嵌套函数一样工作,其范围仅限于该块?
  • 它们的工作方式是什么意思?您在这里使用的是 `university::project::work` 所指的命名空间。命名空间与函数完全不同。你指的是哪个范围和哪个块?

标签: c++ namespaces


【解决方案1】:

C++ 中的命名空间可以嵌套,因此您引用的多个命名空间。

例子:

namespace foo {
    std::string cool_phrase;
    namespace bar {
        void func(int n) { ... }
    }
}

/* We will refer to cool_phrase as such: */
std::cout << foo::cool_phrase << std::endl;

/* We will call func as such: */
foo::bar::func(10);

此功能在 C++14 及之前的版本中不可用。

【讨论】:

    【解决方案2】:

    例如,如果您有以下命名空间。

    namespace A
    {
        namespace B
        {
            namespace C
            {
                int d;
            }               
        }
    }
    

    当您编写using namespace A::B::C; 时,您可以直接访问d。 如果您写过using namespace A;,则必须通过B::C::d 访问d

    #include <iostream>
    namespace A
    {
        namespace B
        {
            namespace C
            {
                int d;
            }               
        }
    }
    int main()
    {
        using namespace A;
        B::C::d = 0; //OK
        C::d = 0; //NOT OK, C is not visible from A
        using namespace A::B;
        C::d = 0; //OK
        d = 0; //NOT OK
        using namespace A::B::C;
        d = 0; // OK
    }
    

    【讨论】: