C++ 入门基础
1.命名空间1.1 namespace 的价值使用命名的目的是对标识符的名称进行本地化一避免命名冲突或名字污染1.2 namespace 的定义^ 定义命名空间需要使用到 namespace 的关键字后面跟命名空间的名字然后接一对{}即可{}中即为命名空间的成员。命名空间中可以定义变量函数类型……^ namespace 本质是定义出一个域这个域跟全局域各自独立不同的域可以定义同名变量^ C中域有函数局部域全局域命名空间域类域域影响的是编译时语法查找一个变量/函数/类型出处的逻辑所以有了域隔离名字冲突就解决了。局部域和全局域除了影响编译查找逻辑还会影响变量的生命周期命名空间域和类域不影响变量生命周期。^ namespace 只能定义在全局但也可以嵌套定义。^ 多文件中可以定义同名 namespace 他们会默认合并到一起就像同一个 namespace 一样#includestdio.h #includestdlib.h namespace lee { // 命名空间中可以定义变量/函数/类行 int rand 10; int Add(int left, int right) { return left right; } struct Node { struct Node* next; int val; }; } int main() { // 这里默认是访问的是全局的 rand 函数指针 printf(%p\n, rand); // 这里指定 lee 命名空间中的 rand printf(%d\n, lee::rand); return 0; }1.3 namespace 使用编译查找一个变量的声明/定义时 默认只会在局部或者全局查找不会到命名空间里面去查找。所以我们要使用命名空间中定义的变量/函数有三种方式^ 指定命名空间访问项目中推荐这中方式^ using 将命名空间中某个成员展开项目中经常访问的不存在冲突的成员推荐这种方式^ 展开命名空间中全部成员项目不推荐冲突风险大#includestdio.h #includestdlib.h #includeiostream namespace lee { int a 666; int b 888; } int main() { // 指定命名空间访问 printf(%d\n, lee::a); // using 将命名空间中某个成员展开 using lee::b; printf(%d\n, b); //展开命名空间中全部成员 using namespace lee; printf(%d %d\n, a, b); cout a endl; return 0; }2. C 输入 输出^ iostream 是 Input Output Stream 的缩写是标准的输入输出流库定义了标准的输入输出对象。^ std::cin 是istream 类的对象它主要面向窄字符的标准输出流。scanf)^ std::cout 是 ostream 类的对象它主要面向窄字符的标准输出流。(printf)^ std::enl 是一个函数流插入输出时相当于插入一个换行字符串加刷新缓冲区。\n^ 是流插入运算符 是流提取运算符^ C的输入输出可以自动识别变量类型能更好的支持自定义类型对象的输入输出。^ cout / cin / endl 等都属于 C 标准库C 标准库都放在一个叫 std (standard) 的命名空间中所以要通过命名空间的使用方式去使用它们。#includeiostream using namespace std; int main() { // 在 io 需求比较高的地方加上以上 3 行代码 // 可以提高 C IO效率 ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); int a 8; ; double b 1.1; char c x; cout a b c endl; cin a; cin b c; cout a b c endl; return 0; }3. 缺省参数^ 缺省参数是声明或定义函数时为函数的参数指定一个缺省值。在调用该函数时如果没有指定实参则采用该形参的缺省值否则使用指定的实参缺省参数分为全缺省和半缺省函数。有些地方把缺省参数也叫默认函数^ 全缺省函数就是全部形参给缺省值半缺省就是部分形参给缺省直。C 规定半去缺省参数必须从右往左依次连续缺省不能间隔跳跃给缺省值。^ 带缺省参数的函数调用 C 规定必须从左到右依次给实参不能跳跃给实参。^ 函数声明和定义分离时缺省参数不能在函数声明和定义中同时出现规定必须函数声明给缺省值。#includeiostream using namespace std; void Func(int a 0) { cout a endl; } // 全缺省 void Func1(int a 10,int b 20,int c30) { cout a a endl; cout b b endl; cout c c endlendl; } // 半缺省 void Func2(int a ,int b 20, int c 30) { cout a a endl; cout b b endl; cout c c endl endl; } int main() { Func(); // 没有传参时使用参数的默认值 Func(10); // 传参时使用指定的实参 Func1(); Func1(1); Func1(1, 2); Func1(1, 2, 3); Func2(1); Func2(1, 2); Func2(1, 2, 3); return 0; }4. 函数重载C 支持在同一个作用域中出现同名函数但是要求这些同名函数的形参不同可以是参数个数不同或者类型不同。这样 C 函数调用就表现出了多态行为使用更灵活。^ 返回值不同不能作为重载条件因为调用时存在歧义编译器不知道调用谁5. 引用5.1 引用的概念和定义引用不是新定义一个变量而是给已经存在的变量取链路一个别名编译器不会为引用变量开辟内存空间它和它引用的变量共用一块内存空间。类型 引用别名 引用对象#includeiostream using namespace std; int main() { int a 11; //引用b 和 c 是 a 的别名 int b a; int c a; //也可以给别名 b 取别名d 相当于还是 a 的别名 int d b; d; cout a endl; cout b endl; cout c endl; cout d endl; cout a endl; cout b endl; cout c endl; cout d endl; return 0; }5.2 引用的特性^ 引用在定义时必须初始化^ 一个变量可以有多个引用^ 引用一旦引用一个实体再不能引用其他实体5.3 引用的使用^ 引用在实践中主要是于引用传参和引用做返回值中减少拷贝提高效率和改变引用对象时同时改变被引用对象。^ 引用和指针在实践中相辅相成功能有重叠性但是各有特点互相不可替代。#includeiostream using namespace std; void Swap(int rx, int ry) { int tmp rx; rx ry; ry tmp; } int main() { int x 66; int y 88; cout x y endl; Swap(x, y); cout x y endl; return 0; }5.4 const 引用^ 可以引用一个 const 对象但是必须用 const 引用。const 引用也可以引用普通对象因为对象的访问权限在引用过程中可以缩小但是不能放大。^ 类似 int rb a * 3; double d 12.356; int rd d; 这样一些场景下 a *3 的结果保存子啊一个临时对象中在类型转换中会产生临时对象存储中间值也就是rb 和 rd 引用的都是临时对象而 C 规定临时对象具有常性所以这里就触发了权限放大必须要用常引用才可^ 所谓临时对象就是编译器需要一个空间暂存表达式的求值结果是临时创建的一个未命名的对象C 中把这个未命名对象叫做临时对象。5.5 指针和引用的关系C 中指针和引用就像两个性格迥异的亲兄弟指针是哥哥引用是弟弟在实践中他们相辅相成功能有重叠性但是各有自己的特点互相不可替代。^ 语法概念上引用是一个变量的取别名不开空间指针是存储一个变量地址要开空间。^ 引用在定义时必须初始化指针建议初始化但是语法上不是必须的。^ 引用在初始化时引用一个对象后就不能在引用其他对象而指针可以在不断地改变指向对象。^ 引用可以直接访问指向对象指针需要解引才是访问指向对象。^ sizeof 中含义不同引用结果为引用类型的大小但指针始终时地址访问所占字节个数32 位平台下占 4 个字节64 位下占 8 个字节。^ 指针很容易出现空指针和野指针的问题引用很少出现引用使用起来相对更安全一些。6. inline^ 用 inline 修饰的函数叫做内联函数编译时 C 编译器会在调用的地方展开内联函数这样调用内联函数就需要建立栈帧了就可以提高效率。^ inline 对于编译器而言只是一个建议也就是说你加了 inline 编译器也可以选择在调用的地方不展开不同编译器关于 inline 展开情况各不相同因为 C 标准没有规定这个。inline 使用于频繁调用的短小函数对于递归函数代码相对多一些的函数加上 inline 也会被编译器忽略。^ C 语言实现宏函数也会在预处理时替换展开但是宏函数实现很复杂很容易出错且不方便调试C设计了 inline 目的就是替代 C 的宏函数^ inline 不建议声明和定义分离到两个文件分离会导致链接错误。因为 inline 被展开就没有函数地址链接时就会出现报错。7. nullptrNULL 实际是一个宏^ C 11 中引入 nullptr nullptr 是一个特殊的关键字nullptr 是一种特殊类型的字面量它可以转换成任意其他类型的指针类型使用 nullptr 定义空指针可以避免类型转换的问题因为 nullptr 只能被隐式地转换为指针类型而不能转换为整数类型。

相关新闻

基于Simulink的基于扰动观测器(DOB)的抗网侧扰动整流​

基于Simulink的基于扰动观测器(DOB)的抗网侧扰动整流​

目录 手把手教你学Simulink——基于Simulink的基于扰动观测器(DOB)的抗网侧扰动整流​ 摘要​ 一、背景与挑战​ 1.1 网侧扰动对整流系统的危害​ 1.2 DOB抗扰动控制的核心优势与设计目标​ 1.2.1 DOB基本原理​ 1.2.2 设计目标与关键指标​ 二、系统架构与核心算法​…

2026/7/2 23:47:30 阅读更多 →
EENotes#001 数据转换器的电压基准选择与设计技巧

EENotes#001 数据转换器的电压基准选择与设计技巧

应用说明:数据转换器的电压基准选择与设计技巧 由于我最近在做这个方向的内容,就顺便翻译了一下这个文档,希望能帮助到需要的人,本翻译文档发布已获Texas Instruments (TI)批准。本文来自 Ti 同名文章并做部分修改。原文标题为:Vo…

2026/7/6 12:47:32 阅读更多 →
YOLO26涨点改进| CVPR 2026 |全网创新首发、注意力改进篇 |引入PFGA外围频率引导聚合模块,提升复杂空间结构和多尺度目标的建模能力,适合目标检测,图像分割,图像分类等CV任务高效涨点

YOLO26涨点改进| CVPR 2026 |全网创新首发、注意力改进篇 |引入PFGA外围频率引导聚合模块,提升复杂空间结构和多尺度目标的建模能力,适合目标检测,图像分割,图像分类等CV任务高效涨点

一、本文介绍 🔥本文给大家介绍利用PFGA外围频率引导聚合模块改进YOLO26网络模型,PFGA通过频率信息引导多尺度外围特征的动态融合,增强网络的空间特征表达能力。该模块利用多尺度大核卷积获取不同感受野的上下文信息,并通过频率描述子生成像素级门控权重,使模型能够在不…

2026/7/7 14:38:32 阅读更多 →

最新新闻

大数据开发工具-Transwarp Data Studio

大数据开发工具-Transwarp Data Studio

大数据开发工具-Transwarp Data StudioTranswarp Data Studio ( 简称TDS ) 是星环科技自研的一站式大数据开发工具,提供数据集成、存储、治理、服务和共享等数据处理全生命周期的企业级管理能力,结合星环科技大数据基础平台 Transwarp Data Hub&#xff…

2026/7/7 15:19:17 阅读更多 →
基于K4UJE3D4AA-KFCL03V的12GB汽车电子内存设计:2颗实现高密度低功耗方案

基于K4UJE3D4AA-KFCL03V的12GB汽车电子内存设计:2颗实现高密度低功耗方案

K4UJE3D4AA-KFCL03V:三星48Gb LPDDR4X车规级高密度内存颗粒深度解析在车载信息娱乐系统、高级驾驶辅助系统(ADAS)以及各类对容量、功耗和可靠性有综合要求的嵌入式应用中,内存颗粒的选型直接影响系统的数据处理能力和长期稳定性。…

2026/7/7 15:17:17 阅读更多 →
PCF8591与PIC32MX695F512L的I2C通信与数据采集实现

PCF8591与PIC32MX695F512L的I2C通信与数据采集实现

1. PCF8591与PIC32MX695F512L的硬件协同设计 PCF8591作为一款经典的8位ADC/DAC转换芯片,与PIC32MX695F512L这款32位高性能微控制器的组合,为开发者提供了灵活可靠的混合信号处理方案。这套组合特别适合需要同时处理多路模拟信号输入输出的场景&#xff0…

2026/7/7 15:17:16 阅读更多 →
嵌入式系统2x2键盘矩阵优化设计与实现

嵌入式系统2x2键盘矩阵优化设计与实现

1. 项目背景与核心价值 在嵌入式系统开发中,输入设备的设计往往面临一个经典矛盾:功能需求日益复杂,但硬件资源却极为有限。最近我在开发一款工业级手持设备时,就遇到了这样的挑战——需要在仅有的4个GPIO引脚上实现16种功能的可靠…

2026/7/7 15:13:16 阅读更多 →
终极Purpur配置指南:打造你的个性化Minecraft服务器

终极Purpur配置指南:打造你的个性化Minecraft服务器

终极Purpur配置指南:打造你的个性化Minecraft服务器 【免费下载链接】Purpur Purpur is a drop-in replacement for Paper servers designed for configurability, and new fun and exciting gameplay features. 项目地址: https://gitcode.com/gh_mirrors/pu/Pur…

2026/7/7 15:13:16 阅读更多 →
Windhawk:像调音师一样定制你的Windows操作系统体验

Windhawk:像调音师一样定制你的Windows操作系统体验

Windhawk:像调音师一样定制你的Windows操作系统体验 【免费下载链接】windhawk The customization marketplace for Windows programs: https://windhawk.net/ 项目地址: https://gitcode.com/gh_mirrors/wi/windhawk 你是否曾对着Windows一成不变的界面叹气…

2026/7/7 15:11:15 阅读更多 →

日新闻

鸿蒙新特性:图片画廊与轮播导航——构建沉浸式图片浏览体验

鸿蒙新特性:图片画廊与轮播导航——构建沉浸式图片浏览体验

图片浏览是移动应用中最高频的场景之一。从社交应用的照片流到电商平台的商品图集,从旅游应用的景点相册到摄影作品展示——用户对图片浏览的体验要求不断提高:流畅的切换动画、直观的缩略图导航、便捷的收藏操作、自动播放模式。HarmonyOS NEXT ArkUI 虽…

2026/7/7 0:05:16 阅读更多 →
24V DC-DC降压芯片PW2312B/PW2815,SOT23-6到SOP8-EP方案对比

24V DC-DC降压芯片PW2312B/PW2815,SOT23-6到SOP8-EP方案对比

24V稳压芯片完整选型指南 PW8600 PW75XX PW2815 PW2312B LDODC/DC全方案 一、24V稳压方案概述 24V直流电源在工业自动化、门禁系统、电梯控制、汽车电子、LED驱动、监控设备等场景中应用极广,是最常见的中压直流母线电压。要将24V母线稳定降压至下游MCU、传感器…

2026/7/7 0:05:16 阅读更多 →
RAG+知识图谱混合检索与Graph RAG核心对比

RAG+知识图谱混合检索与Graph RAG核心对比

做企业RAG落地的团队,往往容易卡在一容易踩坑的选型难题: 当需求单纯靠向量RAG搞不定、单纯靠知识图谱也搞不定,必须同时依赖「文本语义理解 实体关系推理」时,到底是做「向量图谱混合检索」就够了,还是必须上「Grap…

2026/7/7 0:07:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/7 14:24:45 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/7 12:34:47 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻