C 到 C++ 丝滑过渡教程(入门基础篇)
目录 -一、namespace)1.1 namespace的价值1.2 namespace的定义1.3 命名空间的使用二、C输入输出三、缺省参数四、函数重载五、引用5.1 引用的特性5.2 引用的使用5.3 指针与引用的关系六、const引用七、inline八、nullptr一、namespace### 1.1 namespace 的价值值#includestdio.h#includestdlib.hintrand10;intmain(){// 编译报错“rand”: 重定义因为在头文件stdlib.h中rand是“函数名”printf(%d\n,rand);return0;}在一个项目中命名冲突是很常见的问题而 namespace 可以很好地解决决1.2 namespace的定义定义命名空间需要用到关键字 namespace结构为 namespace 空间名字 { }{ } 中为命名空间的成员可以定义函数、变量等。。 - namespace 本质是定义一个域这个域跟全局域各自独立即不同的域可以定义同名变量。namespace 只能定义在全局域但可以嵌套定义。#includestdio.h#includestdlib.hnamespaceTian{intrand10;//命名空间可以嵌套namespaceLi{intrand20;};namespaceNuo{intrand30;};}intmain(){// 打印标准库rand函数的地址函数要加printf(%p\n,rand);//这里访问指定命名空间的randprintf(%d\n,Tian::rand);//10printf(%d\n,Tian::Li::rand);//20printf(%d\n,Tian::Nuo::rand);//30}项目中多文件中同名 namespace被认为是一个 namespace不会冲突。突 - C 标准库都放在一个叫 stdstandard的命名空间中。。1.3 命名空间的使用编译查找一个变量的声明/定义时默认只会在局部或者全局查找不会到命名空间里面去查找。可以通过以下三种方式去访问问#includestdio.hnamespaceTian{inta10;}intmain{//编译报错 a未声明标识符printf(%d\n,a);//指定命名空间访问printf(%d\n,Tian::a);// using 将命名空间中某个成员展开项目中经常访问的不存在冲突的成员推荐这种方式式usingTian::a;printf(%d\n,a);// 展开命名空间中全部成员冲突风险很大)usingnamespaceTian;printf(%d\n,a);return0;}## 二、C 输入 输出出iostream是 Input Output Stream 的缩写是标准的输入、输出流库定义了标准的输入、输出对象。。-cout、cin、endl等都属于 C 标准库C 标准库都放在一个叫stdstandard的命名空间中所以要通过命名空间的使用方式去用它们。。 -std::cin是istream类的对象它主要面向窄字符narrow characters (of type char)的标准输入流。。-std::cout是ostream类的对象它主要面向窄字符的标准输出流。。std::endl 是一个函数流插⼊输出时相当于插入⼀个换行字符加刷新缓冲区。是流插入运算符是流提取运算符。C语言还用这两个运算符做位运算左移/右移。使用C输入输出更方便不需要像printf/scanf输入输出时那样需要手动指定格式C的输入输出可以自动识别变量类型C的流能更好的支持自定义类型对象的输入输出。⼀般日常练习中我们可以using namespace std实际项目开发中不建议using namespace std#includeiostreamusingnamespacestd;intmain(){inta0;doubleb0.1;charcx;couta b cendl;// 可以⾃动识别变量的类型cina;cinbc;coutaendl;coutb cendl;return0}在io需求比较高的地方如部分大量输入的竞赛题中加上以下3行代码可以提高CIO效率ios_base::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);三、缺省参数- 缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时如果没有指定实参则采用该形参的缺省值否则使用指定的实参缺省参数分为全缺省和半缺省参数。数- 全缺省就是全部形参给缺省值半缺省就是部分形参给缺省值。C 规定半缺省参数必须从右往左依次连续缺省不能间隔跳跃给缺省值。。- 带缺省参数的函数调用C 规定必须从左到右依次给实参不能跳跃给实参。。做项目时函数声明和定义分离时缺省参数不能在函数声明和定义中同时出现规定必须函数声明给缺省值。缺参使用示例*#includeiostreamusingnamespacestd;voidFunc(inta0){coutaendl;}intmain(){// 没有传参时使用参数的默认值值Func();//输出0//传参时使⽤指定的实参Func(10);//输出10return0;}#includeiostreamusingnamespacestd;// 全缺省voidFunc1(inta10,intb20,intc30){couta aendl;coutb bendl;coutc cendlendl;}// 半缺省voidFunc2(inta,intb10,intc20){couta aendl;coutb bendl;coutc cendlendl;}intmain{Func1();//102030 60Func1(1);//12030 51Func1(1,2);//1230 33Func1(1,2,3);//123 6Func2(100);//1001020 130Func2(100,200);//10020020 320return0}四、函数重载C 支持在同一作用域中出现同名函数但是要求这些同名函数的形参不同参数个数不同或者类型不同。这样 C 函数调用就表现出了多态行为使用更灵活。。#includeiostream// 参数类型不同usingnamespacestd;intAdd(intleft,intright){countint Add(int left, int right)endl;returnleftright;}doubleAdd(doubleleft,doubleright){coutdouble Add(double left, double right)endl;returnleftright;}//参数个数不同voidf(){coutf()endl;}voidf(inta){coutf(int a)endl;}// 参数类型顺序不同voidf(inta,charb){coutf(int a,char b)endl;}voidf(charb,inta){coutf(char b, int a)endl;}// 返回值不同不能作为重载条件因为调⽤时也⽆法区分//void fxx()//{}////int fxx()//{//return0;//}// 下⾯两个函数构成重载// 但是f1()调⽤时会报错存在歧义既可以匹配无参的f1()也能匹配带默认参数的f1(int a10)//void f1(){// cout f1() endl;//}//void f1(int a 10{// cout f1(int a) endl;//}五、引用引⽤不是新定义⼀个变量而是给已存在变量取了一个别名编译器不会为引⽤变量开辟内存空间它和它引⽤的变量共⽤同⼀块内存空间比如李逵江湖上人称 “黑旋风”林冲外号豹子头头类型 引用别名 引用对象;*intmain(){inta0;// b、c 都是 a 的别名名intba;intcb;// 也可以给别名 b 取别名d 相当于还是 a 的别名名intdb;d;// areturn0;}5.1引用的特性引用在定义时必须初始化引用绑定的对象不能换inta10;intba;intc20;bc;// 这里并非让 b 引用 c因为 C 引用不能改变指向,这里是一个赋值coutaendl;coutaendl;coutbendl;coutcendl;b、c 引用的对象地址一样即绑定对象一样5.2 引用的使用引用在实践中主要用于引用传参和引用做返回值中减少拷贝提高效率和改变引用对象时同时改变被引用对象。。用引用来实现交换函数可以减少地址拷贝语法更简洁voidSwap(intrx,intry){inttmprx;rxry;rytmp;}这里 ret 是函数局部变量函数运行结束后会销毁。。return ret 时会把 ret 的值拷贝一份到临时变量放到寄存器里再把临时变量的值赋值给外面的 x。缺点产生拷贝大对象时开销大intfunc(){intret0;returnret;}intxfunc();由此可以明白顺序表找下标的方法是将数组对应下标的值拷贝到临时变量里返回同时也无法修改这个临时变量的值因为这个临时变量是纯右值语法规定右值不能作为赋值左操作数*intSLAt(SLsl,inti){returnsl.a[i];// 拷贝元素到临时变量产生副本}SLAt(sl,i)1;// 这个编译会报错左操作数要是左值值修改后return sl. a[i],可以理解为用一个临时引用变量 int tmp sl. a[i]编译器不会真的创建一个名叫 tmp 的变量只是逻辑等价返回的是返回对象的别名这样就可以对数组的数进行修改intSLAt(SLsl,inti){returnsl.a[i];}SLAt(sl,i)1;注意func那里不能把返回值int变成int因为ret是函数局部变量返回他的引用时ret空间已经被销毁了本质是一种类似野指针的行为5.3 指针与引用的关系C 中指针和引用在实践中相辅相成功能有重叠性但是各有自己的特点互相不可替代。。语法概念上引用是一个变量的别名不开空间而指针是存储一个变量地址要开空间。。- 引用在定义时必须初始化指针建议初始化但是语法上不是必须的。。- 引用在初始化时绑定一个对象后就不能再绑定其他的对象了而指针可以不断地改变指向对象。。- 引用可以直接访问指向对象指针需要解引用才是访问指向对象。。指针容易出现空指针或者野指针而引用一般不会因此引用使用起来更安全一些。sizeof(引用)得到的是原数据类型本身的大小但sizeof指针始终是地址空间所占字节个数(32位平台下占4byte64位下是8byte)。六、 const引用在 C 中对象的访问权限在引用过程中可以缩小但是不能放大大constinta10;// a是常量只读不能修改intr1a;// 报错普通引用会修改权限权限放大禁止constintr2a;// 合法const引用只读权限匹配intb20;// b既可读也可写constintrb;// 合法权限可以缩小r100;// 报错r是const引用只读b100;// 合法原变量本身依旧能改int rb a*3;double d 12.34;int rd d;a*3的结果保存在一个临时对象中int rd d也是类似在类型转换中会产生临时对象存储中间值也就是说 rb 和 rd 引用的都是临时对象而 C 规定临时对象具有常性所以这里就触发了权限放大必须要用常引用才可以。。- 所谓临时对象就是编译器需要一个空间暂存表达式的求值结果时临时创建的一个未命名的对象C 中把这个未命名对象叫做临时对象象inta10;constintra30;// int rb a * 3; 编译报错a*3 的运算结果会用一个临时对象储存不能用可修改普通引用 int 绑定因为权限不能放大大const int rb a*3; // const int 常引用可以正常绑定定doubled12.34;// int rd d;编译出错因为d 是 double 类型变量引用 rd 是 int类型不匹配编译器会自动隐式转换把 12.34 截断小数生成临时 int 值 12这个 12 是匿名临时对象constintrdd;## 七、 inlinee运行机制使用 inline 修饰的函数称为内联函数编译阶段编译器会将函数代码原地展开省去函数调用时栈帧创建、参数压栈、跳转返回的开销提升程序执行效率。编译器特性仅为建议inline 只是给编译器的优化提示而非强制指令编译器有权忽略展开请求以下场景会直接放弃内联:函数存在递归调用。函数代码量大、逻辑复杂。函数包含循环、分支多的复杂逻辑。C 引入 inline 的核心目的安全替代 C 语言宏函数兼顾代码展开效率与类型安全、可调试性。声明和定义不能分离到两个文件声明时同时写出定义。八、 nullptrNULL 的底层定义- C 语言NULL 是无类型空指针 (void*)0- CNULL 直接等价于整数字面量 0### nullptr 核心特性性是关键字不是宏宏- 只能隐式转换成任意指针类型不能转换成整数数

相关新闻

退款期证据收集法:多节点测速方法论与实操指南

退款期证据收集法:多节点测速方法论与实操指南

退款期证据收集法:多节点测速方法论与实操指南工具地址:https://www.speedce.com 社区论坛:https://bbs.speedce.com 联系:speedceadsgmail.com写在前面 围绕「退款期证据收集法」,本文提供可落地的技术指南&#xff0…

2026/8/18 1:03:52 阅读更多 →
On-Call 前 5 分钟:收到告警后 SpeedCE 怎么测

On-Call 前 5 分钟:收到告警后 SpeedCE 怎么测

On-Call 前 5 分钟:收到告警后 SpeedCE 怎么测工具地址:https://www.speedce.com 社区论坛:https://bbs.speedce.com 联系:speedceadsgmail.com写在前面 本文围绕「On-Call 前 5 分钟」展开,提供可落地的技术方案&…

2026/8/18 1:49:11 阅读更多 →
从零构建HTML5自定义视频播放器:原生API与交互实战

从零构建HTML5自定义视频播放器:原生API与交互实战

1. 项目概述&#xff1a;为什么我们需要自定义 video 控件&#xff1f; 在网页开发中&#xff0c; <video> 标签是嵌入视频内容最直接的方式。浏览器为它提供了一个默认的控制条&#xff0c;包含播放/暂停、进度条、音量、全屏等按钮。这个默认控件简单、通用&#xff…

2026/8/16 22:13:44 阅读更多 →

最新新闻

CMA平台与EM-P系统:领克03插混版如何重塑运动轿车新标杆

CMA平台与EM-P系统:领克03插混版如何重塑运动轿车新标杆

1. 谍照背后的信号&#xff1a;CMA平台与领克03的电气化转型最近&#xff0c;一组关于领克03插电混动版车型的谍照在网络上流传开来&#xff0c;虽然车身覆盖着厚重的伪装&#xff0c;但一些关键细节已经足够让熟悉领克和CMA平台的人浮想联翩。对于关注汽车行业&#xff0c;尤其…

2026/8/18 1:49:45 阅读更多 →
Linux线程安全与同步机制实战指南

Linux线程安全与同步机制实战指南

1. 线程安全基础概念解析在Linux系统编程中&#xff0c;线程安全是每个开发者必须掌握的核心概念。简单来说&#xff0c;线程安全指的是当多个线程同时访问某个函数、变量或资源时&#xff0c;程序仍能保持正确的行为。我见过太多因为忽视线程安全导致的诡异bug——数据莫名其妙…

2026/8/18 1:49:45 阅读更多 →
Linux软链接创建指南:绝对路径与相对路径的实战解析

Linux软链接创建指南:绝对路径与相对路径的实战解析

1. 项目概述&#xff1a;从“链接”到“软链接”的认知跃迁在Linux世界里&#xff0c;ln命令创建的“链接”是一个既基础又强大的概念&#xff0c;尤其对于从Windows或macOS转战过来的朋友&#xff0c;理解它就像打通了文件系统操作的任督二脉。很多人第一次接触ln -s时&#x…

2026/8/18 1:49:45 阅读更多 →
Windows11文件夹上传服务器方案与优化指南

Windows11文件夹上传服务器方案与优化指南

1. Windows11文件夹上传至服务器的完整方案解析作为日常开发运维中的高频操作&#xff0c;文件传输的效率直接影响工作效率。不同于单文件传输&#xff0c;文件夹上传涉及目录结构保持、批量处理等复杂需求。本文将基于Windows11环境&#xff0c;详解四种主流文件夹上传方案及其…

2026/8/18 1:49:45 阅读更多 →
从零部署Jspgou商城:传统Java Web项目实战与高频问题排查

从零部署Jspgou商城:传统Java Web项目实战与高频问题排查

1. 项目概述与核心价值最近在折腾一个老牌的Java开源商城项目——Jspgou&#xff0c;这算是一个挺有年代感但结构清晰的电商系统了。很多朋友可能一听“开源商城”就觉得是烂大街的玩意儿&#xff0c;但说实话&#xff0c;能把一个像Jspgou这样功能相对完整、代码结构也还看得过…

2026/8/18 1:49:45 阅读更多 →
Pandas DataFrame行列名修改:从基础操作到高级实战

Pandas DataFrame行列名修改:从基础操作到高级实战

1. 项目概述&#xff1a;为什么DataFrame的行列名修改是数据分析的“第一道工序”&#xff1f;刚接触Pandas做数据分析的朋友&#xff0c;可能觉得修改DataFrame的行名和列名是个微不足道的小操作&#xff0c;无非就是改几个标签而已。但在我十多年的数据处理经验里&#xff0c…

2026/8/18 1:48:45 阅读更多 →

日新闻

告别逐帧截图:用 extract-video-ppt 快速提取视频中的 PPT 并一键导出 PDF

告别逐帧截图:用 extract-video-ppt 快速提取视频中的 PPT 并一键导出 PDF

告别逐帧截图&#xff1a;用 extract-video-ppt 快速提取视频中的 PPT 并一键导出 PDF 【免费下载链接】extract-video-ppt extract the ppt in the video 项目地址: https://gitcode.com/gh_mirrors/ex/extract-video-ppt 如果你还停留在"看网课 不停暂停 截图 …

2026/8/18 0:00:57 阅读更多 →
思源宋体TTF一站式上手:7个字重免费商用,从下载到上线的完整走查

思源宋体TTF一站式上手:7个字重免费商用,从下载到上线的完整走查

思源宋体TTF一站式上手&#xff1a;7个字重免费商用&#xff0c;从下载到上线的完整走查 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 你是不是也经历过这种时刻&#xff1a;设计稿里…

2026/8/18 0:00:58 阅读更多 →
华硕笔记本控制权回收指南:GHelper 如何用一个 10MB 文件替代 Armoury Crate

华硕笔记本控制权回收指南:GHelper 如何用一个 10MB 文件替代 Armoury Crate

华硕笔记本控制权回收指南&#xff1a;GHelper 如何用一个 10MB 文件替代 Armoury Crate 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, …

2026/8/18 0:00:59 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者&#xff0c;最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent&#xff0c;从本地部署到云端API&#xff0c;我们正处在一个技术栈快速重构的节点。然而&#xff0c;面对层出不穷的模型、框架和工具&#xf…

2026/8/17 2:58:27 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/17 2:58:30 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。&#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室&#x1f447; 关注我领取海量matlab电子书和…

2026/8/17 2:58:32 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速&#xff1a;macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/17 18:54:37 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南&#xff1a;3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗&#xff1f;ncmdump解密工具帮你轻松解决这个困…

2026/8/17 18:55:16 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片&#xff1a;为英语学习 App 打造桌面级学习助手适用平台&#xff1a;HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0&#xff08;API 26 Beta&#xff09;新增了 AgentCard 智能体卡片能力&#xff0c;这是继 HMAF&#xff08;鸿蒙智能体框架&#x…

2026/8/17 18:55:55 阅读更多 →