C++命名空间详解

目录

C++的由来:

C语言的命名缺陷:

什么是命名空间?

命名空间的访问方式:

1、指定访问

2、展开命名空间(慎用)

相关知识:


C++的由来:

C++原来本质上是在C的基础上补充的语法,去补充C的缺陷
由此而引出了一系列的语法和新的东西
后来发展到一定的程度,就自成体系
新晋成为一个新的语言
但是,因为是从C语言的基础上中衍生出来的
所以,就叫做C Plus Plus,即C++

C语言的命名缺陷:

C有一个明显的缺陷,就是命名的问题
什么命名问题?

例如,我们有一个头文件,#include<stdlib.h>
其中有一个函数叫做rand
那么现在我们要定义一个函数,函数名也叫做rand
此时,就会出问题


为什么?
因为,C程序在运行之前要进行编译
也就是头文件会展开,即把头文件的代码展开,类似于拷贝到当前项目
那么头文件展开的代码中已经有了一个函数叫做rand
后面我们又定义了一个命名为rand
就会出现重定义的问题
同时,不仅仅是这个场景下
再例如,不同的程序员,在写一个项目的时候,有可能会写同一个函名。
这个时候就会出问题,到底用谁的?你改还是我改?
那怎么办?
那就是,用命名空间

什么是命名空间?


要理解命名空间首先要理解代码运行的机制
在代码运行之前,首先会进行编译链接
首先是头文件展开
然后再到main函数
main函数内的变量和函数,首先会到局部域去找
局部域找不到就会到全局域找
什么是域?
全局域,你暂时可以理解为当前项目下的所有代码空间
局部域,相应的就是当下函数的作用域空间(命名空间其实也是一个局部域)
上面我们说过,一个域可以定义同一个变量,但是在不同的域却不可以定义,会出现重定义的问题
所以,如果要定义相同的变量名
就可以使用命名空间
命名空间就是一个域
在全局域中单独开出来的一个域,内部封装你要定义的变量、结构体、函数

那么,这个命名空间域就会独立于全局域、局部域之外
你要访问,就可以指定访问
例如,你在某个命名空间也定义了一个rand函数
要在mian函数调用rand函数
这个时候可以指定访问的是该命名空间的rand函数
而不是全局域中由头文件展开的那个rand函数
这样,就解决了命名冲突的问题

命名空间解决的是命名冲突的问题,什么冲突?库和我们自定义命名的冲突

命名空间的访问方式:


1、指定访问

namespace :: 域中的某值


2、展开命名空间(慎用)


注意,因为命名空间是在全局域中圈出一块,所以,展开以后,其范畴依旧属于全局域
在函数的调用中,依旧要先局部在全局

相关知识:

::域作用限定符
//左边为空,默认为访问全局变量

<<:流插入、左移操作符(二进制左移一位,相当于*2)
当和cout在一起时,就是另外的操作符,流插入,二者并不冲突

cout可以自当识别数据类型
endl可以视为\n,即换行符号//endline

cin >> i >> ch;
//流提取符、右移 操作符(二进制右移一位,相当于/2)

%.2lf  double留小数点后2位
%.3f  float留小数点后3位


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/731745.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ARM单片机中程序在ROM空间和RAM空间的分布(分散加载文件,Scatter-Loading Description File)

对于 K e i l u V i s i o n I D E Keil\quad uVision\quad IDE KeiluVisionIDE&#xff0c;程序编译好之后&#xff0c;代码的下载位置&#xff08; R O M ROM ROM空间&#xff09;以及代码运行的时候使用的 R A M RAM RAM空间&#xff08; R A M RAM RAM空间&#xff09;默认…

下载一些ROS的包的方式

ROS Index 我们可以去ROS Index网站下载一些我们需要的包。打开浏览器在网址框输入index.ros.org。或者点击此处链接ROS Index 在这个网站中我们可以浏览并找到我们需要的包&#xff0c;也可以下载它的源代码或者仅安装到我们的系统中来使用。&#xff08;安装过程在终端中进行…

植物病虫害:YOLO水稻虫害识别数据集(6类,五千余张图像,标注完整)

YOLO水稻虫害识别数据集&#xff0c;包含褐飞虱&#xff0c;绿叶蝉&#xff0c;正常叶片&#xff0c;稻虫&#xff0c;二化螟&#xff0c;蝇蛆6个类别&#xff0c;共五千余张图像&#xff0c;yolo标注完整。 适用于CV项目&#xff0c;毕设&#xff0c;科研&#xff0c;实验等 …

零、自然语言处理开篇

目录 0、NLP任务的基础——符号向量化 0.0 词袋模型 0.1 查表/One-hot编码 0.2 词嵌入模型/预训练模型 0.2.0 Word2Vec &#xff08;0&#xff09;CBOW &#xff08;1&#xff09;Skip-gram 0.2.1 GloVe 0.2.2 WordPiece 0.2.3 BERT 0.2.4 ERNIE NLP自然语言处理&am…

Java 的 System 类常用方法介绍

Java 中的 System 类是一个final类&#xff0c;它提供了与系统相关的属性和方法。它是一个内置的类&#xff0c;可以直接使用&#xff0c;不需要实例化。System 类提供了标准输入、标准输出和错误输出流&#xff0c;以及对外部定义的属性和系统环境的访问。下面是 System 类的一…

python web开发-基于Flask+LeanCloud小店定时任务

在Python Web开发中&#xff0c;使用Flask框架进行Web应用的构建是非常常见的选择。同时&#xff0c;为了处理数据存储和提供云服务&#xff0c;LeanCloud作为一个BaaS&#xff08;Backend as a Service&#xff09;提供商&#xff0c;为开发者提供了丰富的功能。 要实现一个基…

LCR 132. 砍竹子 II

解题思路&#xff1a; 由于数量级较大&#xff0c;需要使用long以及快速幂求余 下图便于理解快速幂求余 class Solution {public int cuttingBamboo(int bamboo_len) {if(bamboo_len < 3) return bamboo_len - 1;int b bamboo_len % 3, p 1000000007;long rem 1, x 3;f…

【PHP+代码审计】PHP基础——数据类型

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【Java、PHP】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收…

012集——显示高考天数倒计时——vba实现

以下代码实现高考倒计时&#xff1a; Sub 高考倒计时() 高考日期 CDate("06,07," & Year(Date)) If Date > 高考日期 Then高考日期 CDate("06-07-" & Year(Date) 1) End If 年月日 Year(Date) & "年" & Month(Date) &am…

网站SE分析-主机IP

在网站SEO优化中&#xff0c;主机IP的选择和优化是一个至关重要的环节。本文将深入探讨主机IP对SEO的影响&#xff0c;并提出相应的优化策略。 物理位置与目标受众 主机的物理位置对网站的访问速度和用户体验有直接影响。因此&#xff0c;在选择主机时&#xff0c;应考虑目标…

Springboot+vue的项目申报管理系统(有报告)。Javaee项目,springboot vue前后端分离项目。

演示视频&#xff1a; Springbootvue的项目申报管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot vue前后端分离项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09…

低密度奇偶校验码LDPC(九)——QC-LDPC译码器FPGA全并行设计

往期博文 低密度奇偶校验码LDPC&#xff08;一&#xff09;——概述_什么是gallager构造-CSDN博客 低密度奇偶校验码LDPC&#xff08;二&#xff09;——LDPC编码方法-CSDN博客 低密度奇偶校验码LDPC&#xff08;三&#xff09;——QC-LDPC码概述-CSDN博客 低密度奇偶校验码…

蓝牙系列七:开源蓝牙协议栈BTStack数据处理

继续蓝牙系列的研究。 在上篇博客,通过阅读BTStack的源码,大体了解了其框架,对于任何一个BTStack的应用程序都有一个main函数,这个main函数是统一的。这个main函数做了某些初始化之后,最终会调用到应用程序提供的btstack_main,在btstack_main里面首先做一些初始化,然后…

C语言指针——常量字符串和 变量字符串

常量字符串和 变量字符串 常量字符串和变量字符串是在编程中常见的两种字符串类型&#xff0c;它们有以下区别&#xff1a; 值的不可变性&#xff1a;常量字符串的值是不可变的&#xff0c;一旦被定义&#xff0c;就不能修改。而变量字符串的值是可变的&#xff0c;可以随时修…

重建大师6.2版本的建模效果出现下图中模糊的情况,是什么原因?

可能是因为坐标原点设置的不对&#xff0c;图例中的三角网都出现了精度损失的问题。 坐标原点设置的具体操作&#xff1a;提交产品后&#xff0c;在弹出的界面&#xff0c;可以设定坐标原点。 重建大师是一款专为超大规模实景三维数据生产而设计的集群并行处理软件&#xff0…

【Python】FTP库的介绍及用法

目录 1、应用场景 2、FTP-标准库 1、应用场景 FTP库&#xff08;ftplib&#xff09;在Python中的应用场景主要包括&#xff1a; 文件上传和下载&#xff1a; 通过FTP服务器&#xff0c;可以提供用于上传和下载文件的功能。这在需要在服务器和客户端之间共享数据的情况下非常…

C语言之练手题

题目1&#xff1a; 思路&#xff1a;我们定义两个变量left和right分别为数组的左端下标和右端下标。 左端下标的元素为奇数时&#xff0c;left继续往前走&#xff0c;为偶数时就停下 右端下标的元素为偶数时&#xff0c;right- -往回走&#xff0c;为奇数时停下 停下后对应的元…

(3)应用与信息

文章目录 前言 3.1 FlightDeck FrSky发射器应用程序 3.2 MAVLink2数据包签名(安全) 3.3 MAVLink高延迟协议 3.4 无线地面站连接中继器 1 概述 2 组件 3 设置 3.5 遥测无线电区域条例 3.6 用于OpenTX的Yaapu遥测脚本 前言 FlightDeck FrSky Transmitter AppMAVLink2 …

太平医康养经理人是医疗资源的链接者

太平人寿通过构建资源整合平台&#xff0c;已成功将国际化医疗服务资源进行深度整合。目前&#xff0c;该公司已完成对英国著名医疗集团Circle Health在中国设立的首家医疗机构——圆和医疗的增资行动&#xff0c;并与新加坡知名的莱佛士私立综合医疗集团签订了业务合作协议。同…

js 中 callee 与 caller 的作用

1.caller 返回一个调用当前函数的引用 如果是由顶层调用的话 则返回 null &#xff08;举个栗子哈 caller 给你打电话的人 谁给你打电话了 谁调用了你 很显然是下面 a 函数的执行 只有在打电话的时候你才能知道打电话的人是谁 所以对于函数来说 只有 caller 在函数执行的时候才…