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/8/11 16:08:03 阅读更多 →
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/8/11 16:08:03 阅读更多 →
011、车载影像系统架构:环视/前视/DMS/OMS多路输入管理与ISP资源调度

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

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

2026/8/11 16:08:03 阅读更多 →

最新新闻

如何快速搭建微信公众号RSS订阅服务:wewe-rss完整部署指南

如何快速搭建微信公众号RSS订阅服务:wewe-rss完整部署指南

如何快速搭建微信公众号RSS订阅服务:wewe-rss完整部署指南 【免费下载链接】wewe-rss 🤗更优雅的微信公众号订阅方式,支持私有化部署、微信公众号RSS生成(基于微信读书) 项目地址: https://gitcode.com/GitHub_Trend…

2026/8/11 17:01:35 阅读更多 →
Jetson开发者必看:jetson-ffmpeg性能测试与优化技巧

Jetson开发者必看:jetson-ffmpeg性能测试与优化技巧

Jetson开发者必看:jetson-ffmpeg性能测试与优化技巧 【免费下载链接】jetson-ffmpeg ffmpeg support on jetson nano 项目地址: https://gitcode.com/gh_mirrors/je/jetson-ffmpeg jetson-ffmpeg是专为Jetson平台打造的FFmpeg扩展库,通过L4T Mul…

2026/8/11 17:01:35 阅读更多 →
CSM 1B核心功能揭秘:对话式语音生成背后的3大技术创新

CSM 1B核心功能揭秘:对话式语音生成背后的3大技术创新

CSM 1B核心功能揭秘:对话式语音生成背后的3大技术创新 【免费下载链接】csm-1b 项目地址: https://ai.gitcode.com/hf_mirrors/sesameAILabs/csm-1b CSM 1B(Conversational Speech Model)是由Sesame开发的对话式语音生成模型&#xf…

2026/8/11 17:01:35 阅读更多 →
2026年好的GEO营销服务商选型指南:让专业能力成为效果稳定器

2026年好的GEO营销服务商选型指南:让专业能力成为效果稳定器

一、市场认知:GEO正在重写品牌触达规则1.1 什么是GEOGEO,全称为Generative Engine Optimization,即生成式引擎优化。它面向AI搜索、智能问答和大模型生成结果,核心目标是提升品牌信息在AI答案中的引用概率与呈现质量。传统搜索时代…

2026/8/11 17:00:35 阅读更多 →
5分钟搞定网格动画:Blender序列导入神器完整指南

5分钟搞定网格动画:Blender序列导入神器完整指南

5分钟搞定网格动画:Blender序列导入神器完整指南 【免费下载链接】Stop-motion-OBJ A Blender add-on for importing a sequence of OBJ meshes as frames 项目地址: https://gitcode.com/gh_mirrors/st/Stop-motion-OBJ 还在为大量网格文件的导入而烦恼吗&a…

2026/8/11 17:00:35 阅读更多 →
2026年GEO营销效果稳定性指南:选对服务商,让AI持续推荐你

2026年GEO营销效果稳定性指南:选对服务商,让AI持续推荐你

一、市场透视:GEO的当下与未来1.1 重新理解GEO的价值锚点GEO,全称为Generative Engine Optimization,即生成式引擎优化。它不同于传统SEO追求网页排名与点击量,而是致力于提升品牌信息在AI生成答案中的引用概率与呈现质量。用户向…

2026/8/11 17:00:35 阅读更多 →

日新闻

如何用Video2X实现专业级视频画质提升:AI视频增强完整指南

如何用Video2X实现专业级视频画质提升:AI视频增强完整指南

如何用Video2X实现专业级视频画质提升:AI视频增强完整指南 【免费下载链接】video2x A machine learning-based video super resolution and frame interpolation framework. Est. Hack the Valley II, 2018. 项目地址: https://gitcode.com/GitHub_Trending/vi/v…

2026/8/11 0:00:02 阅读更多 →
前后端分离项目中控制台与接口工具数据差异排查指南

前后端分离项目中控制台与接口工具数据差异排查指南

1. 问题现象解析:控制台与Apifox的数据差异 最近在调试一个前后端分离项目时,遇到了一个典型问题:后端服务在本地开发环境控制台能正常输出查询数据,但通过Apifox测试时却返回空结果。这种"控制台有数据,接口工具…

2026/8/11 0:00:03 阅读更多 →
AI编程实战:从Claude Code踩坑到游戏开发入门

AI编程实战:从Claude Code踩坑到游戏开发入门

1. 从“AI能帮我做游戏”到“AI让我重新学编程”最近身边不少朋友,尤其是一些非技术背景、但对游戏开发有浓厚兴趣的朋友,都在问我同一个问题:“听说现在用Claude Code这种AI编程工具,小白也能做游戏了,是真的吗&#…

2026/8/11 0:00:03 阅读更多 →

周新闻

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁

5分钟告别提取码焦虑:baidupankey如何智能破解百度网盘资源锁 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾经在深夜寻找一份重要资料&#x…

2026/8/11 1:08:05 阅读更多 →
如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/11 1:08:05 阅读更多 →
收藏!小白程序员轻松入门大模型,从Harness工程开始实践

收藏!小白程序员轻松入门大模型,从Harness工程开始实践

文章强调学习大模型不应只关注模型本身,而应重视模型外的系统搭建,即Harness。提出AgentModelHarness的实用公式,详细介绍Harness的四个层次:持久化层、执行层、控制层和观察与验证层。文章还探讨了上下文工程、工具设计、AGENTS.…

2026/8/11 1:08:05 阅读更多 →

月新闻

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

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

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

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

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

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

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

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

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

2026/8/10 17:07:33 阅读更多 →