📌  相关文章
📜  内联名称空间和名称空间中“ using”指令的用法

📅  最后修改于: 2021-05-30 11:58:03             🧑  作者: Mango

先决条件:C++中的命名空间

内联名称空间是在其原始名称空间定义中使用可选关键字inline的名称空间。

// C++ program to demonstrate working of
// inline namespaces
#include 
using namespace std;
  
namespace ns1
{
   inline namespace ns2
   {
       int var = 10;
   }
}
  
int main()
{
   cout << ns1::var;
   return 0;
}

输出:

10

从上面的示例中我们可以看到,在很多情况下,内联名称空间的成员都被视为是封闭名称空间的成员(在下面列出)。此属性是可传递的:如果名称空间N包含内联名称空间M,而内嵌名称空间M又包含内联名称空间O,则可以像使用M或N的成员一样使用O的成员。

// C++ program to demonstrate working of
// inline namespaces inside inline namespaces
  
#include 
using namespace std;
  
namespace ns1
{
    inline namespace ns2
    {
        inline namespace ns3
        {
            int var = 10;
        }
    }
}
  
int main()
{
    cout << ns1::var;
    return 0;
}

输出:

10

内联说明符使嵌套名称空间中的声明看起来完全像在封闭名称空间中声明的那样。这意味着它将声明(在上例中为“ var”)从嵌套名称空间拖出到包含名称空间。

使用内联名称空间的优点:

  • 避免冗长:考虑上面的代码,如果要打印“ var”,请编写:
    cout << ns1::ns2::ns3::var;

    仅在上述示例中名称空间的名称短的情况下,这才看起来不错。但是,通过将内联函数与名称空间一起使用,无需键入上面给出的整个名称空间或使用“ using”指令。

  • 库的支持:内联名称空间机制旨在通过提供一种支持版本控制的机制来支持库的演变。有关详情,请参阅此。

“使用”指令

也可以通过使用命名空间中的“使用”声明性语句来实现相同的行为(与内联名称空间相同)。命名内联命名空间的using指令隐式插入到封闭的命名空间中(类似于未命名命名空间的隐式using指令)。考虑以下C++代码:

// C++ program to demonstrate working
// of "using" to get the same effect as
// inline.
#include 
using namespace std;
  
namespace ns1
{
    namespace ns2
    {
        namespace ns3
        {
            int var = 10;
        }
        using namespace ns3;
    }
      
    using namespace ns2;
}
  
int main()
{
    cout << ns1::var;
    return 0;
}

输出 :

10

再次,using指令使嵌套名称空间中的声明看起来完全像在封闭名称空间中声明的那样。

另请参见:名称空间的嵌套

参考:
http://en.cppreference.com/w/cpp/language/namespace

要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”