C++ 命名空间

 一、为什么使用命名空间

考虑一种情况,当我们有两个同名的人,Zara,在同一个班里。当我们需要对它们进行区分我们必须使用一些额外的信息和它们的名字,比如这个区域,如果它们生活在不同的区域或者它们的母亲或父亲的名字,等等。

  在您的C++应用程序中也会出现同样的情况。例如,您可能正在编写一些具有名为xyz()函数的代码,并且还有另一个可用的库,它也具有相同的xyz()函数。现在编译器无法知道您在代码中引用的xyz()函数的哪个版本。名称空间(namespace)被设计来克服这个困难,并被用作额外的信息来区分类似的函数、类、变量等等,它们在不同的库中具有相同的名称。使用名称空间,您可以定义定义名称的上下文。本质上,名称空间定义了一个范围。

 

二、命名空间的定义

在C语言中只有一个全局作用域:

1.C语言中所有的全局标识符共享一个作用域
2.标识符之间可能发生冲突

C++中提出了命名空间的概念:

1.命名空间将全局作用域分成不同的部分,
2.不同命名空间中的标识符可以同名而不会发生冲突
3.命名空间可以发生嵌套
4.全局作用域也叫默认命名空间

 

语法:

namespace Name
{
	namespace Internal
	{
		/*...*/
	}
	/*...*/
}

  

C++命名空间的使用:

使用整个命名空间:using namespace name;
使用命名空间中的变量:using name::variable
使用默认命名空间中的变量:  ::variable

 

#include <stdio.h>
#include <iostream>
namespace First 
{
	int i = 0;
}
 
namespace Second
{
	int i = 1;
 
	namespace Internal //嵌套命名空间
	{
		struct P  //嵌套命名空间
		{
			int x;
			int y;
		};
	}
}
 
int main()
{
	using namespace First; //使用整个命名空间
	using Second::Internal::P;  //使用嵌套的命名空间
 
	printf("First::i = %d\n", i);
	printf("Second::i = %d\n", Second::i);  //使用命名空间中的变量
 
	P p = { 2, 3 };
 
	printf("p.x = %d\n", p.x);
	printf("p.y = %d\n", p.y);
 
	system("pause");
	return 0;
}

  

 三、using指令

可以使用using namespace指令避免使用名称空间前置。该指令告诉编译器后续代码正在使用指定命名空间中的名称。

Example:

#include <iostream>
using namespace std;
 
// first name space
namespace first_space {
   void func() {
      cout << "Inside first_space" << endl;
   }
}
 
// second name space
namespace second_space {
   void func() {
      cout << "Inside second_space" << endl;
   }
}
 
using namespace first_space;
int main () {
   // This calls function from first name space.
   func();
   
   return 0;
}

  

四、std命名空间

下列代码可以引用cout而不预先添加命名空间:

#include <iostream>
using std::cout;
 
int main () {
   cout << "std::endl is used with std!" << std::endl;
   
   return 0;
}

  

原文链接:https://blog.csdn.net/qq_40416052/article/details/82528676

原文链接: https://www.cnblogs.com/Allen-rg/p/11395267.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    C++ 命名空间

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/301323

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月15日 下午10:16
下一篇 2023年2月15日 下午10:18

相关推荐