「C++」命名空间

命名空间概念

在初学C++时,会写到的第一段代码肯定是这个:

#include<iostream>
using namespace std;

int main()
{
    
    
	cout<<"hello world"<<endl;
	
	return 0;
}

我相信大多数初学者还是不知道前两行代码的意思,其实一开始我也不知道,老师说这样写就这样写,记住就行了,后来我渐渐弄明白了,第一行好理解,就是标准输入输出头文件,重点是第二行代码,说实话一开始我是真的不知道这一行代码的作用是什么,就只知道这样写就行了,后面踩坑了以后才知道去查去弄明白,所以每一个坑其实都是自己进步的台阶。

这一行代码涉及的知识叫做命名空间,怎么理解命名空间,先看下面代码:

#include<iostream>
using namespace std;

int main()
{
    
    
	int cout = 0;
	cout << cout << endl;

	return 0;
}

运行结果就是直接挂了,在C++中变量、函数和类都是大量存在的,这些变量、函数和类的名称都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突和名字污染。
提炼几点关键信息:

  • 使用命名空间是为了避免命名冲突或名字污染
  • 关键词:namespace
  • 既可以定义变量也可以定义函数

命名空间定义

  • 普通定义

定义命名空间需要使用namespace关键词
先定义一个普通的命名空间Nanlin_1

namespace Nanlin_1
{
    
    
	int a; //定义变量
	int Add(int b,int c)//定义函数
	{
    
    
		return b+c;
	}
}
  • 命名空间也是可以嵌套的
namespace Nanlin_2
{
    
    
	int a; 
	int Add(int b,int c)
	{
    
    
		return b+c;
	}
	namespace Nanlin_3
	{
    
    
		int d; 
		int Sub(int e,int f)
		{
    
    
			return e+f;
		}
	}
}
  • 同一个工程中是可以存在多个相同名称的命名空间的,编译器最终会将他们合在一个命名空间中
  • 需要注意的一点是一个命名空间实际上就是定义了一个新的作用域,命名空间中的所有内容都局限在这个命名空间中。

命名空间用法

命名空间有三种使用方法,分别用代码说明解释
统一使用命名空间Nanlin

namespace Nanlin
{
    
    
	int a=1; 
	int b=2;
}
  • using namespace Nanlin
    和using namespace std是一样的,这个是将C++标准库里的全展开,cout、cin等等都是可以直接使用的,看下面代码运行结果,在main函数里是可以直接使用a和b的。
    在这里插入图片描述
    总结一下,这种使用方法的好处是便捷,但是带来了命名污染

  • using Nanlin::a

这种就是将命名空间里的a单独放出来,可以随便使用
在这里插入图片描述
这次如果再使用b就会报错,如果只使用a就可以运行,但是如果想使用b该如何使用呢,看第三种使用方法

在这里插入图片描述
总结一下,这种方式是单独放出命名空间中某一个变量、函数。

  • Nanlin::a、Nanlin::b

上面两种一个是全部展开随便使用,一个是单独展开一个,这种就是不展开,指定访问。

扫描二维码关注公众号,回复: 12830748 查看本文章

在这里插入图片描述
我要用a我就指定访问a,要用b就指定访问b

当然以上三种使用方法都是可以混合使用的

猜你喜欢

转载自blog.csdn.net/NanlinW/article/details/102919380