C++20 高级编程 001:从极简HelloWorld到现代类型体系全梳理
C20 高级编程 001从极简HelloWorld到现代类型体系全梳理✨ 前言Bilibili 同步视频一、开篇重写 HelloWorld看懂 C20 与老式 C 的本质区别1. C20 模块版标准示例2. 老编译器兼容方案无模块支持时拆解代码里五大核心要素① 两种注释按需选用② 模块 VS 传统头文件 #include③ main程序唯一入口函数④ 输入输出流抛弃 printf/scanf拥抱现代 IO方案 1标准流 std::cout /std::cin方案 2C20 全新格式化 std::format二、命名空间 namespace根治全局命名冲突的神器1. 基础定义与调用2. using 简化写法分两种粒度① 全局引入整个命名空间慎用② 精准引入单个标识符推荐3. 嵌套命名空间三、字面量与变量强类型 C 的基础数据单元1. 丰富的现代字面量2. 变量声明与统一初始化 {}C11 核心推荐3. C 内置基础类型一览4. 数值极值查询 std::numeric_limits5. 类型转换三方案只认 static_cast6. 浮点避坑指南四、运算符体系表达式优先级与书写规范书写优化技巧五、枚举 enum class类型安全的常量集合1. enum class 标准强枚举新项目唯一推荐2. C20 using enum 简化书写3. 旧式 enum仅遗留代码可见新项目禁用结语✨ 前言很多开发者提起 C第一印象是 “语法庞杂、规则细碎、上手门槛高”尤其从 C 语言转来的程序员常会被层出不穷的新标准特性搞得眼花缭乱。C20 作为划时代版本模块、格式化字符串、作用域枚举等重磅特性彻底革新了传统开发模式。本文基于《C20 高级编程第 5 版上册》第一章核心知识点从零梳理现代 C 必备底层基础避开 union、volatile 等冷门语法只聚焦日常业务高频实用内容。无论你是刚入门的新手、有 C 基础的转行者还是多年老 C 程序员查漏补缺都能在这里收获清晰、完整的知识脉络文中附带可直接运行的示例代码帮你直观理解每一条语法规则。Bilibili 同步视频C20 高级编程 001从极简HelloWorld到现代类型体系全梳理一、开篇重写 HelloWorld看懂 C20 与老式 C 的本质区别提起入门程序所有人都写过 HelloWorld但绝大多数人只停留在 “输出一句话” 的表层忽略了这段代码里藏着的整套编译、输入输出、模块化逻辑。1. C20 模块版标准示例// C20 全新模块写法替代老旧头文件importiostream;intmain(){// 传统流输出方式std::coutHello, World!std::endl;return0;}2. 老编译器兼容方案无模块支持时#includeiostreamintmain(){std::coutHello, World!n;return0;}拆解代码里五大核心要素① 两种注释按需选用单行注释//本行 // 后方所有内容失效适合简短备注多行注释/* 内容 */适合大段说明编译器会完全忽略注释文本不会参与编译。② 模块 VS 传统头文件 #include这是 C20 最具里程碑的升级import iostream模块导入无需拆分声明与实现编译速度大幅提升不会出现头文件重复包含、宏污染等陈年痛点#include预处理指令旧式方案预处理器会把整个头文件文本原地拷贝进当前文件多层嵌套时编译效率暴跌。补充标准库头文件规范C 语言旧头文件stdio.h在 C 中分两种版本推荐写法cstdio所有类型、函数收纳在std命名空间类型更安全淘汰写法stdio.h无命名空间隔离极易出现名称冲突。老式头文件防重复包含两种方案// 方案1传统宏守卫全编译器兼容#ifndefEMPLOYEE_H#defineEMPLOYEE_H// 头文件内容...#endif// 方案2现代简化写法主流编译器均支持#pragmaonce③ main程序唯一入口函数程序运行时系统只会识别main函数两种合法签名// 无命令行参数intmain(){return0;// 省略return时编译器自动补return 0}// 带命令行参数argc参数总数argv存储参数字符串intmain(intargc,char*argv[]){// 真实参数从argv[1]开始argv[0]不保证是程序名return0;}返回值约定0 代表程序正常退出非 0 标识异常终止。④ 输入输出流抛弃 printf/scanf拥抱现代 IO很多 C 老程序员习惯printf格式化输出但它存在致命缺陷 ——无类型安全传参类型不匹配不会直接报错只会运行时乱码。C 提供两套更优雅的输出方案。方案 1标准流 std::cout /std::cinstd::cout标准控制台输出std::cerr错误信息专用输出流输出运算符支持链式拼接数字、字符串、布尔值等任意基础类型关键性能坑点⚠️std::endl 换行 强制刷新缓冲区。如果在循环内高频使用会频繁 IO 刷新严重拖慢程序执行速度。日常输出优先用n仅换行按需手动刷新缓冲区。importiostreamintmain(){intnum100;std::cout数字值numn;// 推荐无强制刷新std::cout强制刷新输出std::endl;// 谨慎使用return0;}输入读取示例importiostreamintmain(){intvalue;std::cout请输入数字n;std::cinvalue;return0;}方案 2C20 全新格式化 std::format定义在format模块兼顾可读性与类型安全完美替代拼接输出importiostream;importformat;intmain(){intcount219;// {} 占位符自动匹配后方参数无需记忆%占位符std::coutstd::format(一共有{}种浪漫的表达方式n,count);return0;}二、命名空间 namespace根治全局命名冲突的神器开发中难免同时引入多个第三方库很容易出现函数、变量重名编译器分不清调用哪一份实现命名空间就是用来隔离代码作用域的 “独立隔间”。1. 基础定义与调用importiostream;// 自定义独立命名空间namespacemy_code{voidfoo(){std::cout调用my_code命名空间内的foo函数n;}}intmain(){// 作用域解析运算符::精准定位空间内函数my_code::foo();return0;}2. using 简化写法分两种粒度① 全局引入整个命名空间慎用importiostream;usingnamespacestd;intmain(){// 无需std::前缀直接使用cout简化写法输出文本n;return0;}风险提醒千万不要在头文件 / 模块接口全局写using namespace xxx会污染所有引入该文件的代码再次诱发名称冲突。② 精准引入单个标识符推荐只导入需要的对象污染范围极小importiostream;usingstd::cout;intmain(){cout仅导入coutendl仍需要std::限定nstd::endl;return0;}3. 嵌套命名空间多层空间通过::逐层访问适合大型项目分层管理代码。三、字面量与变量强类型 C 的基础数据单元1. 丰富的现代字面量C 支持多种进制、格式字面量还能用单引号做数字分隔符超长数字可读性直接拉满// 进制字面量intdec123;// 十进制inthex0x7B;// 十六进制intbin0b1111011;// 二进制// 数字分隔符肉眼快速区分位数longbig_num23456789;floatfloat_num0.123456f;// 浮点、字符、字符串字面量floatf3.14f;doubled3.14;charchm;char8_tu8_chu8m;2. 变量声明与统一初始化 {}C11 核心推荐C 允许在代码任意位置声明变量但未初始化变量会持有内存随机脏数据是无数隐蔽 bug 的元凶现代编译器都会抛出警告。三种初始化写法对比统一初始化{}是最优解inta;// 未初始化随机脏值禁止使用intb(7);// 老式圆括号初始化intc7;// 赋值初始化intd{7};// ✅统一初始化全书标准写法// 空花括号零初始化自动归零intzero_int{};// 初始化为0floatzero_float{};// 初始化为0.0int*null_ptr{};// 初始化为空指针nullptr3. C 内置基础类型一览C 是强类型语言变量类型固定无法随意隐式转换整型系列short/int/long/long long区分signed有符号、unsigned无符号浮点系列float单精度、double双精度、long double高精度浮点字符类型char独立字符类型不可等同于signed char/unsigned charstd::byte专门表示单字节语义清晰char8_t/char16_t用于 Unicode 字符布尔bool仅取值true/false。4. 数值极值查询 std::numeric_limits抛弃 C 老旧INT_MAX宏用limits模板安全获取当前平台类型最大 / 最小值importiostream;importformat;importlimitsintmain(){std::coutstd::format(int最大值{}n,std::numeric_limitsint::max());std::coutstd::format(int最小值{}n,std::numeric_limitsint::min());std::coutstd::format(int最低值{}n,std::numeric_limitsint::lowest());std::coutstd::format(double最小正数{}n,std::numeric_limitsdouble::min());std::coutstd::format(double最小负数{}n,std::numeric_limitsdouble::lowest());return0;}关键区分整数min()与lowest()结果一致浮点min()代表最小正数lowest()代表类型能存储的最小负数。5. 类型转换三方案只认 static_castfloatval3.14f;intv1(int)val;// C老式强转可读性差禁止新项目使用intv2int(val);// 函数式转换极少使用intv3static_castint(val);// ✅标准C显式转换语义清晰隐式转换隐患高精度自动转低精度浮点→整型会丢失小数数值溢出时结果错乱编译器会主动告警。6. 浮点避坑指南浮点计算天生存在精度缺陷数值量级差距过大、两个近似相等的浮点数相减精度直接丢失大量十进制小数无法二进制精准存储特殊浮点值inf无穷大、NaN非数字cmath提供std::isinf、std::isnan用于判断。四、运算符体系表达式优先级与书写规范C 运算符分为三类一元运算符单操作数/!、二元运算符双操作数/*/、唯一三元运算符?:。涵盖赋值、算术、自增、位运算、移位、复合赋值等全套操作。书写优化技巧运算符自带固定优先级乘除 加减 位运算复杂表达式不写括号极易踩坑推荐用括号分层可读性翻倍// 难读懂原始写法intres348*221/7*2;// 分层括号逻辑一目了然intres34(8*2)((21/7)*2);所有运算符完整清单、重载规则将在运算符重载章节详细展开。五、枚举 enum class类型安全的常量集合很多新手习惯用一堆 const int 定义固定常量但存在致命漏洞整型可以随意赋值、不同类型常量相互比较不会报错完全无类型约束。enum class 强类型枚举完美解决该痛点。1. enum class 标准强枚举新项目唯一推荐// 自定义棋子类型枚举enumclassPieceType:unsignedlong// 手动指定底层存储类型{King1,Queen,// 自动继承上一个值1 2Rook10,Pawn// 自动1 11};intmain(){PieceType chessPieceType::King;// 错误写法if (chess 1) 无法隐式转int编译报错杜绝非法比较return0;}核心优势强类型隔离不会隐式转为整型枚举成员隔离在自身作用域不同枚举可重名成员支持自定义底层存储类型灵活控制内存占用。2. C20 using enum 简化书写作用域内引入全部枚举成员无需重复书写前缀建议缩小作用域避免冲突enumclassPieceType{King,Queen};intmain(){usingenumPieceType;PieceType pKing;// 直接使用无需PieceType::return0;}也可单独导入单个枚举成员using PieceType::King;3. 旧式 enum仅遗留代码可见新项目禁用老式枚举成员直接暴露到外层全局作用域极易和变量重名无类型安全可随意与整型、其他枚举对比缺陷极多新项目一律摒弃。结语以上全部知识点构成现代 C20 开发的底层地基没有复杂晦涩的模板、多线程、内存管理内容全部是日常写代码每时每刻都会接触的基础语法。掌握模块替代头文件、统一初始化、命名空间隔离、强类型枚举、安全 IO 输出这几大现代特性后你会彻底摆脱老式 C/C 开发的各类隐性 bug代码可读性、安全性、执行性能都会同步提升。后续进阶内容会基于本章基础讲解类、指针、模板、标准容器 vector/optional/string 等高阶工具打好根基再深入学习效率事半功倍

相关新闻

宁波燃气灶维修全域覆盖 欧米到家同城上门深度检修承诺不返工|打不着火|松手熄火|黄火冒黑烟|漏气|各类故障一站式解决

宁波燃气灶维修全域覆盖 欧米到家同城上门深度检修承诺不返工|打不着火|松手熄火|黄火冒黑烟|漏气|各类故障一站式解决

导读宁波燃气灶出现打不着火、点火后松手熄火、火焰发黄、冒黑烟、燃烧不均、旋钮失灵或疑似漏气等问题,可联系欧米到家统一报修热线400-996-9791。平台根据所在区域安排同城维修师傅上门,先检测故障原因,再说明维修方案和费用,确…

2026/10/9 4:55:24 阅读更多 →
012、安防NVR/DVR多路编码架构:海思Hi3516与瑞芯微RK3588的ISP与编码协同

012、安防NVR/DVR多路编码架构:海思Hi3516与瑞芯微RK3588的ISP与编码协同

012、安防NVR/DVR多路编码架构:海思Hi3516与瑞芯微RK3588的ISP与编码协同 去年年底接了个项目,客户要把老旧的DVR方案从海思Hi3516DV300整体切到瑞芯微RK3588,理由是算力不够要上AI。结果板子回来第一天,8路1080P预览就卡成PPT&am…

2026/10/10 15:44:27 阅读更多 →
011、车载影像系统架构:环视/前视/DMS/OMS多路输入管理与ISP资源调度

011、车载影像系统架构:环视/前视/DMS/OMS多路输入管理与ISP资源调度

011、车载影像系统架构:环视/前视/DMS/OMS多路输入管理与ISP资源调度 昨晚在台架上调一个环视拼接的案子,客户报了个现象:车速过了60km/h,左右两侧的拼接缝就开始“呼吸”——亮度忽明忽暗,偶尔还闪一下。我第一反应是…

2026/9/29 3:23:32 阅读更多 →

最新新闻

前端图片翻转避坑指南:CSS transform与canvas重绘的选型与实现

前端图片翻转避坑指南:CSS transform与canvas重绘的选型与实现

简介:面向网页前端初学者的图片翻转示例包,围绕 JavaScript 操作 CSS transform、事件监听与 DOM 样式切换展开,演示点击图片实现 180 度翻转并再次点击恢复原状的效果,适合学习交互设计与动效实现的开发者参考,也适合…

2026/10/10 15:44:24 阅读更多 →
MIPSsim实验报告精讲:指令语义、数据通路与三个汇编程序的避坑要点

MIPSsim实验报告精讲:指令语义、数据通路与三个汇编程序的避坑要点

简介:面向计算机系统结构课程学习的 MIPS 指令系统实验报告资源,适合高校本科生或自学处理器架构的初学者。报告基于 MIPSsim 模拟器,覆盖 MIPS 指令语义、寄存器与内存操作、64 位整数求补等典型实验场景,能帮助读者快速掌握 MIP…

2026/10/10 15:44:24 阅读更多 →
告别手改配置:CC Switch 让 Claude Code 模型切换像切输入法一样简单

告别手改配置:CC Switch 让 Claude Code 模型切换像切输入法一样简单

1. 手动改配置的痛苦,相信你也有过先说个场景,你应该也经历过:Claude Code 用得好好的,突然想试试某个新出的开源模型,或者团队里有人分享了一个调优过的模型服务地址,你第一反应是去翻~/.claude底下的配置…

2026/10/10 15:44:24 阅读更多 →
CodeIgniter 4 仓库开发规范完全指南:兼容性策略、编码标准与 FrankenPHP Worker Mode

CodeIgniter 4 仓库开发规范完全指南:兼容性策略、编码标准与 FrankenPHP Worker Mode

后端Web框架 【免费下载链接】CodeIgniter4 Open Source PHP Framework (originally from EllisLab) 项目地址: https://gitcode.com/gh_mirrors/co/CodeIgniter4 点击查看 免费下载 CodeIgniter 4 是一个成熟的 PHP 开源全栈框架,其生产代码位于 syste…

2026/10/10 15:44:23 阅读更多 →
编译原理实验核心:词法分析、语法分析与符号表实战指南

编译原理实验核心:词法分析、语法分析与符号表实战指南

简介:电子科技大学编译原理实验完整代码包,面向高校计算机专业学生及编译原理自学者,用于深入理解词法分析、语法分析、语义分析等核心概念,解决理论学习与实验实践脱节的问题,也是课程设计或期末实验的极佳参考。压缩…

2026/10/10 15:44:23 阅读更多 →
编译原理课程实验全流程解析:从词法分析到目标代码优化

编译原理课程实验全流程解析:从词法分析到目标代码优化

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

2026/10/10 15:43:22 阅读更多 →

日新闻

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

1. 从“卫星轨道分类”这个标题说起:为什么值得花时间搞懂第一次接触“卫星轨道分类”这个概念,很多人会觉得它离自己很远——不就是天上的星星怎么转吗?但如果你正在做航天任务规划、遥感数据接收、星座设计,甚至只是准备一场航天…

2026/10/10 0:00:39 阅读更多 →
Spring AOP 核心原理与实战:从概念到日志切面落地

Spring AOP 核心原理与实战:从概念到日志切面落地

1. 从一个真实痛点说起:为什么你的代码里到处都是重复逻辑刚入行那会儿,我写过一个用户管理模块,注册、登录、改密码、注销四个接口。每个接口里都塞了几乎一样的日志打印、参数校验、事务开启和提交。当时觉得没什么,能跑就行。直…

2026/10/10 0:00:40 阅读更多 →
Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

简介:这是一套面向计算机相关专业学生与项目实战学习者的Python数据采集与分析可视化完整项目,以Boss直聘岗位数据为对象,适合用作毕业设计、课程设计或期末大作业。资源包共38个文件,约246KB,以13个py源码文件为核心&…

2026/10/10 0:00:40 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

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

2026/10/10 11:14:25 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

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

2026/10/10 1:36:08 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

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

2026/10/10 11:14:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/10 10:38:42 阅读更多 →