> 文章列表 > 【C++入门】命名空间的定义和使用

【C++入门】命名空间的定义和使用

【C++入门】命名空间的定义和使用

文章目录

  • 一、命名空间是什么
  • 二、命名空间的定义
  • 三、命名空间的使用

一、命名空间是什么

在C/C++中,变量、函数和类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染。

命名空间:用于解决命名冲突
一个命名空间就是一个新的作用域,其中的所有内容都局限于该空间中。
同名变量的访问优先级:局部域 > 全局域 > 命名空间域

二、命名空间的定义

定义命名空间,需要使用到namespace关键字。
做法:在namespace后面跟命名空间的名字,然后接一对{}即可。
{}中的就是命名空间的成员。
注:命名空间的定义是可嵌套的。

// lx是命名空间的名字,一般开发中是用项目名字做命名空间名
namespace lx
{// 命名空间中可以定义变量/函数/类int a;
}

一个工程中允许存在多个同名的命名空间,这些同名的命名空间最后会被编译器合成到同一个命名空间中。
std是C++标准库的命名空间名,C++将标准库的定义实现都放在这个命名空间中。

三、命名空间的使用

谈到命名空间的使用,就得介绍一个域操作符::
例如,::a的意思就是访问全局变量a
例如,lx::a的意思就是访问命名空间lx里的变量a

命名空间的使用有三种方式:
1.命名空间名称+域操作符

int main()
{printf("%d\\n", lx::a);return 0;  
}

2.使用using将命名空间中某个成员引入

using lx::a;
int main()
{printf("%d\\n", a);return 0;  
}

3.使用using namespace将命名空间引入

using namespce lx;
int main()
{printf("%d\\n", a);return 0;  
}

std命名空间的使用惯例:

  1. 日常练习中建议直接using namespace std
  2. using namespace std展开,标准库就全部暴露出来了,如果我们定义的变量 / 函数 / 类跟标准库里的重名,就会产生冲突。
  3. 所以在项目开发中建议:
  • 指定访问,例如:
std::cout << "hello world!" << std::endl;
  • 展开常用的,例如:
using std::cout;
using std::endl;
cout << "hello world!" << endl;

ps:关于coutcin更多复杂的用法,比如控制浮点数输出精度、控制整型输出进制格式,由于C++兼容C语言,这些又用得不是很多,我们就不展开学习了。后续如果有需要,我们再配合文档学习。