当前位置: 首页 > news >正文

C++初阶语法——命名空间

前言:C++,即cplusplus,顾名思义,是C语言promax版本,C++兼容C语言。
C++的诞生是因为贝尔实验室的本贾尼等大佬认为C语言的语法坑实在太多,拥有许多不足之处(比如命名冲突,),在长期的使用后感觉多有不便,因此发明了C++,以弥补填上这些语法坑。

目录

  • 命名空间
    • 1.命名空间与域作用限定符::
    • 2.展开命名空间
    • 3.套娃

命名空间

在了解命名空间前,博主先提出一个小问题:我们常常在C++的文件开头包using namespace std;,那么你知道这句话的作用是什么吗? (下文黄底片段)

C语言中存在着命名冲突的问题,假如未来你和你的同事合作负责一个项目,当你们各自负责的库链接起来后就可能出现命名冲突问题,比如你们声明定义了同名的变量,在C语言中,这种时候只能你们之中有一人做出让步,将所有该变量改成别名。C++的命名空间就是为解决这种情况而诞生的。

1.命名空间与域作用限定符::

namespace example  
{//命名空间中可以定义变量/函数/类。int a = 0;int Add(int x,int y){return x+y;}
}
int main()
{//可以将命名空间想象成一个围墙,围墙里面的东西必须要有权限才能访问。//cout << a << endl; 实操后发现并不能打印出a的值cout << example::a << endl; //域作用限定符::  借助该符号可以访问命名空间里的数据。return 0;
}

2.展开命名空间

一.部分展开(授权)

假如我们需要经常使用上面创建的命名空间里的Add函数,但是每次都使用域作用限定符又显得特别繁琐。这是我们就可以展开部分命名空间。
格式为:using example::Add;

namespace example
{int a = 0;int Add(int x,int y){return x+y;}
}
using example::Add;   //展开部分命名空间
int main()
{cout << Add(1,2) << endl; //这里并没有运用与操作限定符,却也可以使用命名空间里的Add函数。return 0;
}

二.全部展开

形式:using namespace example;
std是C++标准库的命名空间,using namespace std;就是全部展开C++标准库,如果没有展开std,那么cout,cin等语法都无法使用

namespace example
{int a = 0;int Add(int x, int y) {return x + y;}
}
using namespace example;  //全部展开命名空间
int main()
{//不用域作用限定符也可访问example里的变量,函数cout << a << endl;cout << Add(1, 2) << endl;return 0;
}

3.套娃

命名空间里可以嵌套使用命名空间,不过一般不会这么使用,但是偶然看到后也不要惊奇。

namespace example
{int a = 0;namespace instance{int a = 1;}int main()
{cout << example::a << endl;  // 0cout << example::instance::a << endl; // 1return 0;
}

总结:综上,命名空间的使用共有3种方式。
今后若是想定义两个甚至多个同名的变量,可以将它们放在不同的命名空间中。
使用好命名空间,会让你在以后的练习和工作中减少许多不必要的麻烦。

文末BB:对哪里有问题的朋友,尽管在评论区留言,若哪里写的有问题,也欢迎朋友们在评论区指出,博主看到后会第一时间确定修改。最后,制作不易,如果对朋友们有帮助的话,希望能动动你们发财的小手给点点赞和关注.
在这里插入图片描述

http://www.lryc.cn/news/114875.html

相关文章:

  • Axwing.878 线性同余方程
  • 【Pytorch+torchvision】MNIST手写数字识别
  • spring boot 集成rocketmq
  • redis Hash类型命令
  • P1194 买礼物(最小生成树)(内附封面)
  • oracle基础语法和备份恢复
  • 【MATLAB第66期】#源码分享 | 基于MATLAB的PAWN全局敏感性分析模型(有条件参数和无条件参数)
  • vue2过渡vue3技术差异点指南
  • 两个多选框(select)之间值的左右上下移动
  • 【设计模式】——模板模式
  • 工业机器视觉系统开发流程简介
  • 【Unity3D】Renderer Feature简介
  • 麻了!包含中科院TOP,共16本期刊被标记为“On Hold”状态!
  • 2.Flink应用
  • Matlab进阶绘图第25期—三维密度散点图
  • C++设计模式之桥接设计模式
  • 论文笔记:SUPERVISED CONTRASTIVE REGRESSION
  • Java 多线程并发 CAS 技术详解
  • 如何压缩高清PDF文件大小?将PDF文件压缩到最小的三个方法
  • 04 统计语言模型(n元语言模型)
  • Linux各目录详解
  • 【css】属性选择器分类
  • 备份容灾哪家好怎么样
  • 【前端实习生备战秋招】—HTML 和 CSS面试题总结(三)
  • Ansible Rsync 使用Ansible Rsync模块进行文件传输
  • Eclipse如何自动添加作者、日期等注释
  • uniapp返回
  • 【Antd】antd form表单的rules文案无法跟随状态重渲染的原因及解决办法
  • Rocketmq Filter 消息过滤(TAGS、SQL92)原理详解 源码解析
  • Attacks in NLP