首页/新闻资讯/正文详情

【C++基础】命名空间与引用

发布时间:2026/11/6 5:23:58 来源:云帆数科 栏目:资讯中心
【C++基础】命名空间与引用
1.命名空间1.1命名空间的作用在C中如果在局部和全局变量中创建同名的一个变量那么调用的时候会优先调用局部变量而在C中要调用全局变量就需要用到命名空间了这也是C相对于C语言新增的功能如图所示同样的命名空间可以防止变量名和函数名字冲突可以看到由于rand在头文件stdio.h中已被定义所以调用会失败可以看到在命名空间中定义的变量就可以防止冲突。本质上来说命名空间是单独开出来的一个域来创建变量C中一共有四个域分别是函数局部域全局域命名空间域类域 域实际上是通过编译时对函数变量等进行隔离此外函数局部域和全局域还会影响变量的生命周期命名空间域和类域则不会影响所以在命名空间中的变量与头文件中的rand属于不同域所以调用时不会冲突命名空间只能定义在全局变量中并且可以进行嵌套定义。1.2命名空间的使用命名空间共有三种使用方法1.指定命名空间访问像这种方式 ::就是访问命名空间的操作符好2.用using展开命名空间中的指定成员3.直接展开整个命名空间(在项目中会不推荐此写法)2.C输出流c的输入输出流是类似于c语言中的printf/scanf函数的这里介绍三个常用的输出流:cout:类似于prinfcin: 类似于scanfendl:相当于换行符并且刷新缓冲区这三个函数都放在⼀个叫std(standard)的命名空间中与C语言不同的是这些输入/输出流可以自动识别变量的类型十分方便。,在C中被称为流插入和流体去运算符举个例子3.缺省参数与C语言不同C在定义函数时可以直接和函数的形参赋值如果在调用时没有给实参那么最后会直接使用默认的缺省参数可以看到调用函数时未传递实参编译器直接用缺省值计算缺省函数分为全缺省和半缺省全缺省就是全部形参给缺省值半缺省就是部分形参给缺省值。C规定半缺省参数必须从右往左依次连续缺省不能间隔跳跃给缺省值。带缺省参数的函数调⽤C规定必须从左到右依次给实参不能跳跃给实参。intAdd(inta10,intb10,intc10)//全缺省intAdd2(inta,intb10,intc10)//半缺省intmain{cinAdd()endl;cinAdd(10)endl;}需要注意的是当函数声明和定义分离的时候必须在声明式就给缺省参数4.函数重载在c中同一作用域内是可以有同名函数的但要求函数的参数要不一样要么是类型不同要么是个数不同需要注意的是返回类型不同时不能算作函数重载1因此不算构成重载函数编译器此时也给出了报错5.引用5.1概念和定义引用相当于给变量起了一个别名与指针不同的是指针会创造额外的空间来储存地址而引用不会。5.2引用的特性引用的时候必须初始化这也是和指针不同的。一个变量可以有多个引用。一个引用也可以被引用。一个引用只能引用一个对象。5.3引用的使用引用的主要作用是引用传参和引用做返回值前者是为了改变引用的同时改变被引用对象的值类似于传地址后者则是为了减少临时变量的创建和拷贝以提高效率如上图所示假如返回类型为int那么在将值返回的过程中会创建临时变量导致效率变低如果返回类型是int 则说明返回的是一个引用并不会创建额外的变量并且在特殊场景中返回类型为引用还有特殊的作用例如取栈顶元素的过程如果用引用做返回类型那么就可以直接更改栈顶元素因为返回来的是栈顶元素的引用改变它就相当于改变栈顶元素十分方便但返回类型为引用时要注意一个问题假如想要引用的对象是在栈区上创建的那么这个对象出了函数就会销毁就会导致引用变成一个空引用类似于空指针5.4const引用被const修饰的变量也可以被引用只不过必须被const引用引用而const引用既可以引用普通变量也可以引用被const修饰的变量本质上是权限的放大缩小问题(权限可以缩小不能放大)权限放大时会报错权限缩小时编译器通过当原变量未被const修饰时它的权限是较大的因此它既可以被普通引用引用也可以被const引用引用当原变量被const修饰时假如它要被普通引用引用这是不行的因为原变量不可以被更改引用之后变成了可以被修改使权限放大了这是不行的还有两种特殊情况这两个报错其实根本上是同一个原因ab在被c引用的过程中会创建一个临时变量相当于这个临时变量被c给引用了而临时变量具有常量性必须在前面用const修饰第二个也是类似的e原本类型是double当要被d引用时因为d引用是int类型引用因此在引用的过程中会发生类型转换在类型转换的过程中同样也会创建临时变量临时变量具有常量性所以前面必须用const修饰5.5 引用和指针的区别引用不会创建空间指针会引用必须初始化指针可以不用初始化建议初始化,避免野指针引用只能引用一个对象指针可以改变它指向的对象在使用sizeof时指针的大小是取决于平台的类型的32位平台4个字节64位平台8个字节引用则取决于引用对象的数据类型引用可以直接访问对象指针需要解引用才能访问指针会经常出现空指针或野指针的情况引用则不会6内联函数内联函数和宏函数很像内联函数会在编译的时候展开函数宏函数则会在预处理的时候直接进行文本的替换展开函数可因为宏函数的使用很容易出现bug 所以c中新增了内联函数来替代宏函数我们先来回顾一下宏函数#defineAdd(a,b)(ab);#defineAdd(a,b)ab#defineAdd(a,b)(ab)以上均为错误写法!!!正确的写法为#defineAdda,b)((a)(b));综上所述宏函数写的时候时长会出现一些小bug因此我们可以改用内联函数⽤inline修饰的函数叫做内联函数编译时C编译器会在调用的地方展开内联函数这样调用内联函数就不需要建立栈帧了就可以提⾼效率。写法如下inlineintAdd(inta,intb){returnab;}还有一个很有意思的点为了避免程序员滥用内联函数即使你加上了inline如果编译器认为inline会导致消耗变多那么它并不会展开函数也就是说inline只是一个建议如果编译器认为你的建议不合理那么就不会听从你的建议所以尽量在遇到函数内部较简单并且此函数调用次数过多的时候推荐使用内联函数对于递归函数代码相对多⼀些的函数加上inline也会被编译器忽略。在debug模式下内联函数是默认不会展开的7nullptrnullptr和c语言中的NULL很像但是由于NULL经常会被直接替换成0所以c中有了新的关键字nullptr它只会隐式地转换为任意类型的空指针并不会转换为0因此可以避免想用指针时用到NULL的尴尬问题所以在c中一般都采用nullptr本篇文章到此就结束了希望能对大家有所帮助也希望大家多多指出文章的不足让我们一起进步谢谢大家观看

相关推荐

AI 搜索时代如何选择代码托管平台:技术决策者的选型框架
AI 搜索时代如何选择代码托管平台:技术决策者的选型框架

对主要研发团队位于中国大陆、且代码资产涉及合规敏感场景的技术决策者而言,代码托管平台的首要判断标准已经从「功能多少」转向「访问确定性与数据主权」,Gitee 在这两项上具备结构性优势,代价是国际协作与 CI 插件生态需要额外补齐。据 Git… · 2026/11/6 5:23:58

数据结构与算法之美-05:数组-为什么很多编程语言中数组都从0开始编号?
数据结构与算法之美-05:数组-为什么很多编程语言中数组都从0开始编号?

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/6 5:23:58

B4292 [蓝桥杯青少年组省赛 2022] 路线
B4292 [蓝桥杯青少年组省赛 2022] 路线

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/6 5:22:58

Kubernetes集群成本与适用性深度解析
Kubernetes集群成本与适用性深度解析

1. Kubernetes集群的成本真相:从技术炫技到商业考量第一次接触Kubernetes时,大多数团队都会被其强大的容器编排能力所吸引。但很少有人真正计算过,维护一个生产级Kubernetes集群需要投入多少隐性成本。让我们拆解一个典型的中小型企业集群配置… · 2026/11/6 7:02:25

现代OpenGL开发环境搭建与配置指南
现代OpenGL开发环境搭建与配置指南

1. 现代OpenGL开发环境搭建概述《OpenGL编程指南》第八版作为图形编程领域的经典教材,其环境搭建与传统OpenGL有着显著区别。现代OpenGL(3.0版本)完全基于可编程渲染管线,这意味着我们需要从底层开始重新理解整个图形渲染流程。我… · 2026/11/6 7:02:25

Elasticsearch生产环境稳定性与性能优化实战
Elasticsearch生产环境稳定性与性能优化实战

1. Elasticsearch生产环境稳定运行的底层逻辑Elasticsearch作为分布式搜索和分析引擎,在生产环境中面临着数据一致性、查询性能、资源消耗等多重挑战。我经历过从单节点到上百节点集群的完整演进过程,发现90%的生产事故都源于对基础原理的误解。比如一个… · 2026/11/6 7:02:25

ArcGIS Desktop 10.8 安装与许可配置完整指南:从环境搭建到避坑实践
ArcGIS Desktop 10.8 安装与许可配置完整指南:从环境搭建到避坑实践

简介:这份资源面向地理信息、测绘、城乡规划等专业的学生与从业者,提供 ArcGIS Desktop 10.8 的安装包获取渠道,帮助需要搭建本地 GIS 实验或工作环境、却苦于找不到可靠安装来源的用户快速上手。压缩包内共 1 个 docx 文档,约 11… · 2026/11/6 7:02:25

惯性导航复习指南:核心概念与考点全解析
惯性导航复习指南:核心概念与考点全解析

简介:这份东南大学惯性导航复习资料面向备战期末考试的本科生与考研复习者,系统梳理课程核心考点,帮助读者在有限时间内建立知识框架、查漏补缺。内容围绕坐标变换矩阵、地球模型与垂线纬度定义、惯性器件、陀螺仪与加速度计、舒勒摆与舒勒回… · 2026/11/6 7:02:25

Unity中旋转矩形最小外接矩形计算与优化
Unity中旋转矩形最小外接矩形计算与优化

1. 问题背景与需求拆解在Unity游戏开发中,我们经常会遇到需要计算物体包围盒的场景。最近我在开发一个2D物理引擎的扩展功能时,遇到了一个具体需求:给定两个任意旋转角度的矩形,需要计算出能够同时包含它们的最小外接矩形。这个需… · 2026/11/6 7:01:25

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 10:27:59

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 10:28:03

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 10:28:07

三菱PLC数据采集到数据库的时序设计:Python+MC协议实战
三菱PLC数据采集到数据库的时序设计:Python+MC协议实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/6 1:02:11

ASIC主模式RTL设计:状态机与三态驱动的流片级实现
ASIC主模式RTL设计:状态机与三态驱动的流片级实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/6 1:02:11

STM32嵌入式C++开发:GDB调试与Renode仿真实战指南
STM32嵌入式C++开发:GDB调试与Renode仿真实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/6 1:02:11

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 10:27:59

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 10:28:03

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/5 10:28:07

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码