从c到c++——01.命名空间

        在c语言中,常有这么一个问题,一个正常运行的项目,当引入了一些外部库之后,会出现一些变量重命名的情况,c语言本身并没有很好的解决方案。只能靠人力去阅读代码并修改变量名。c++中引入了命名空间的概念来解决这个问题。

1:域作用限定符

::     ------域作用限定符。

        在c++中两个冒号代表域作用限定符,可以通过使用域作用限定符来访问不同的域。

        当没有::时,默认会先在当前函数的局部域中找,没有的话会在到全局域中找

        当::前没有域名时,代表全局域

        std::代表去std域中找

打个比方,当前函数的局部域就相当于是自家的菜地,种的西红柿;std相当于隔壁一个叔叔的菜地,种的茄子;全局域相当于爷爷奶奶的菜地,种的土豆;如果说我想吃西红柿,直接去地里摘(调用)即可,如果说我想吃土豆,可以给爷爷奶奶打个招呼(通过::调用全局变量),也可以直接地里摘(调用),如果说我想吃隔壁叔叔家的茄子,那必须先和隔壁叔叔打个招呼(std::)

在不同的域中定义变量,可以让同名变量存在


2:自定义域

代码与c语言的结构体有点相似,定义命名空间,需要使用到namespace关键字,后面跟命名空间的名字,然后接一对{}即可,{}中即为命名空间的成员。

namespace  //域名
{
    //域的内容,如int x=10;
}

定义后即可通过 域名:: 来访问域的内容

函数和结构体也是可以被定义在命名空间中的

定义函数

定义结构体

使用命名空间中的结构体的语法为         struct    域名:: 结构体名

 当两个命名空间的名字相同时,会把两个命名空间中的元素合并,如果有相同的元素会报错

命名空间可嵌套使用

打个比方,隔壁张三,李四是铁哥们,经常把自己的东西分享给对方


03:展开命名空间

以std为例

部分展开

#include<iostream>
using std::cout;
using std::endl;
int main()
{
	cout << "hello world" << endl;
	return 0;
}

把std域中的cout和endl拿出来放到全局变量中,此时调用cout和endl时不需要使用std::

可以理解成隔壁张大爷茄子大丰收,他和爷爷是几十年的棋友,马上就给爷爷奶奶送了茄子,这样自己家也可以吃到茄子了

全部展开

#include<iostream>
using namespace std;
int main()
{
	cout << "hello world" << endl;
	return 0;
}

此时把std中的全部变量展开到全局变量,之后调用std中的任何东西都不要需要再加std。这种写法在很多算法题里很常见。

相关推荐

  1. C++(1) 命名空间

    2024-01-26 13:26:03       34 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-26 13:26:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-26 13:26:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-26 13:26:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-26 13:26:03       20 阅读

热门阅读

  1. Jenkins

    Jenkins

    2024-01-26 13:26:03      38 阅读
  2. redis详解- 过期删除策略和内存淘汰策略

    2024-01-26 13:26:03       26 阅读
  3. 数字孪生在能源电力行业的技术难点和应用场景

    2024-01-26 13:26:03       29 阅读
  4. 推荐几款AI绘图软件且提供psd源文件

    2024-01-26 13:26:03       50 阅读
  5. 相似度度量方法整理

    2024-01-26 13:26:03       28 阅读