第十章:C++ 标准

C++标准 C++标准是C++编程语言的规范,由国际标准化组织(ISO)制定。C++标准的发展历程可以追溯到1998年,当时ISO/IEC 14882:1998标准被发布,这是第一个C++标准,常被称为C++98。随后,C++标准经历了多次更新和修订,包括C++03(2003年)、C++11(2011年)、C++14(2014年)和C++17(2017年)。最新的C++标准是C++20,于2020年发布,引入了许多新特性,如概念(concepts)、范围库(ranges)、协程(coroutines)等。 阅读详情

第十章:C++ 标准


C++ 语言不断演进,每个新版本都引入了新的特性和改进。本章将详细介绍 C++11、C++14、C++17、C++20 和 C++23 的重要特性及其对 C++ 开发的影响。通过对这些标准的学习,读者可以掌握现代 C++ 编程的最新趋势,提高代码的可维护性、性能和可扩展性。


10.1 C++11:现代 C++ 的开端

C++11 标准是 C++ 语言历史上的一次重大更新,它引入了大量的新特性,使得 C++ 语言更加现代化和简洁。C++11 标准的目标是让 C++ 更加安全、表达力更强,同时提高代码的效率。

  • 自动类型推导(auto)

    • auto 关键字让编译器自动推导变量类型,减少冗余代码。
    • 示例:
      auto x = 42;  // x 的类型是 int
      auto pi = 3.14159;  // pi 的类型是 double
      
  • 范围-based for 循环

    • C++11 引入了范围-based for 循环,简化了遍历容器的代码。
    • 示例:
      std::vector<int> vec = {1, 2, 3, 4, 5};
      for (auto& value : vec) {
          std::cout << value << std::endl;
      }
      
  • 智能指针(std::unique_ptr 和 std::shared_ptr)

    • std::unique_ptr 和 std::shared_ptr 自动管理资源,减少内存泄漏风险。
    • 示例:
      std::unique_ptr<int> ptr = std::make_unique<int>(10);
      std::shared_ptr<int> sptr = std::make_shared<int>(20);
      
  • 并发编程支持(std::thread)

    • 引入了 std::thread 类,使多线程编程更加简单。
    • 示例:
      void print() {
          std::cout << "Hello from thread!" << std::endl;
      }
      
      int main() {
          std::thread t(print);
          t.join();
      }
      
  • 右值引用与移动语义

    • 右值引用 (&&) 使得移动语义成为可能,提升性能,尤其是在大对象的复制过程中。
    • 示例:
      std::vector<int> make_vector() {
          std::vector<int> v = {1, 2, 3};
          return v;  // 使用移动语义
      }
      
  • Lambda 表达式

    • Lambda 表达式使得匿名函数更加简洁,可以作为回调或线程任务。
    • 示例:
      auto add = [](int a, int b) { return a + b; };
      std::cout << add(3, 4) << std::endl;
      

10.2 C++14:小的改进与修复

语言增强

  • 泛型 lambda:允许 auto 作为 lambda 参数类型,自动生成模板 lambda,如 auto f = [](auto x, auto y){ return x+y; }; ([geeksforgeeks.org][1])。
  • constexpr 函数放宽:支持更多语句(如循环、条件、局部变量),增强编译期计算能力 。
  • 二进制字面量 (0b1010) 和 数字分隔符 (1'000'000) 。

标准库更新

  • std::make_unique:弥补 C++11 缺失,为 unique_ptr 提供工厂函数 。
  • 异构查找:关联容器支持用不同但可比较类型进行查找,如 set<string>.find("foo") ([zh.wikipedia.org][2])。
  • 共享互斥锁 (shared_timed_mutex) 与 shared_lock ([en.wikipedia.org][3])。
  • std::is_final、std::cbegin/cend 等增强类型和迭代器支持 ([zh.wikipedia.org][2])。

10.3 C++17:更多现代化特性

语言特性

  • 结构化绑定:支持 auto [a, b] = tuple_or_struct; ([geeksforgeeks.org][1])。
  • if/switch 带初始化语句,例如 if (auto it = v.find(x); it != v.end()) … ([geeksforgeeks.org][4])。
  • 模板类的参数推导:无需显式指定模板参数,如 std::pair p(1, 2); 。
  • inline 变量:支持头文件中常量的单一定义 ([geeksforgeeks.org][1])。
  • 折叠表达式:简化变参模板,如 (… + args) 。
  • UTF‑8 字符字面量(u8'…')、十六进制浮点数等 ([en.wikipedia.org][5])。
  • 模板 template<auto> 和 非类型模板参数推导 ([stackoverflow.com][6])。

标准库增强

  • std::optional, std::variant, std::any, std::string_view 等新类型 ([zh.wikipedia.org][7])。
  • 零开销节点操作:支持 extract(), merge(),高效操作 map/set 元素 ([zh.wikipedia.org][7])。
  • 并行 STL 算法 (std::execution) 。
  • 文件系统库 (<filesystem>)、std::invoke, std::apply 。

10.4 C++20:概念、协程与更强大的库

语言新特性

  • Concepts:模板约束机制,如 template<Integral T> 。
  • 三路比较(spaceship operator <=>):统一比较符号 。
  • Ranges 库、range-based for 更优语义 ([geeksforgeeks.org][8])。
  • Modules:替代 #include 的模块化系统 ([medium.com][9])。
  • Coroutines:协程支持 co_await/co_yield/co_return ([medium.com][9])。
  • consteval, constinit:编译时期的计算与初始化保证 。
  • import 关键字, 新的属性机制, 与 constexpr 投影变得更强 ([zh.wikipedia.org][2])。

库特性

  • 时间/日历库(<chrono>) 增强 。
  • std::to_array, std::likely/unlikely 属性 ([geeksforgeeks.org][8])。
  • 字符串增强、浮点支持、概念库 等 ([reddit.com][10])。

10.5 C++23:渐进式增强

语言更新

  • 简化隐式 move 规则,使代码更直观 ([cppstories.com][11])。
  • deducing this:方法中自动推导 this 的类型 ([en.cppreference.com][12])。
  • if consteval:区分编译期与运行时分支 ([en.cppreference.com][12])。
  • 多维下标运算符(a[i][j] 可重载为二维) 。
  • 预处理增强:#elifdef, #warning 支持 。
  • 字符字面更严格,移除部分宽字符支持 。

标准库增强

  • std::format, std::println:格式化输出支持 。
  • std::expected:替代异常处理或错误码 ([geeksforgeeks.org][13])。
  • flat_map, flat_set, mdspan, generator, spanstream, stacktrace ([geeksforgeeks.org][13])。
  • std::byteswap, std::to_underlying, std::move_only_function, std::unreachable 等实用工具 ([geeksforgeeks.org][13])。
  • 可作 constexpr 的 std::unique_ptr、bitset、cmath funcs 等 。
  • 单子操作:optional/expected 添加 .and_then, .or_else等 ([zh.wikipedia.org][14])。

总结

📊 对比总结

特性领域C++14C++17C++20C++23
语言泛型 lambda, 放宽 constexpr, 二进制字面量结构化绑定, 折叠表达式, inline 变量, 模板推导Concepts, modules, coroutines, spaceship, ranges简化隐式 move, if consteval, deducing this, 多维下标
标准库make_unique, shared_mutex, 异构查找optional/variant/any/string_view, filesystem, 并行算法chrono 强化, ranges, to_array, 属性format/println, expected, flat_map, mdspan, generator, stacktrace…

📌 小结

  • C++14:主要是对 C++11 的补强,语言与库的细节优化。
  • C++17:广泛提升可用性与简洁性,STL 增强和模板系统增强。
  • C++20:一次重大巨变,引入概念、协程、模块、ranges,现代 C++ 的里程碑。
  • C++23:进一步完善,强调可用性、性能和编译期能力,填补过去留下的空白。
C++26 下一代C++标准 摘要:C++26作为下一代C++标准,将延续C++20的革新步伐,带来三大核心特性:反射(Reflection)增强元编程能力,契约(Contracts)规范接口设计,以及std::execution框架统一异步编程。从C++98的模板基础到C++11的现代特性,再到C++20的四大革新(范围库/协程/概念/模块),C++26有望成为继C++11和C++20之后又一里程碑式版本。该标准计划2025年完成,将显著提升C++在编译时编程、系统设计和并发处理方面的表现。 阅读详情

相关推荐

掌握C++日期处理:cpp.fecha库实战指南

本文还有配套的精品资源,点击获取 简介:在C++中处理日期和时间是一项基础任务,尤其在需要记录和分析时间信息的应用开发中尤为重要。cpp.fecha项目通过自定义类扩展了C++标准库的时间处理功能,提供了更丰富的接口来管理日期。本指南将详细介绍cpp.fecha库的类设计、日期格式化与解析、常见日期操作,以及与C++标准库和其他时间处理库的兼容性和扩展性。 1. ...

weixin_35754962的博客 1482

第十章:C++标准模板库

主要内容: 1.泛型程序设计 2.与STL有关的概念和术语 3.STL的容器 4.迭代器 5.STL的算法 6.函数对象 暂时略,内容有点多,而且也很重要!但我看完了,日后补上。 转载于:https://www.cnblogs.com/chip/p/4772758.html...

weixin_30732487的博客 90

【MDC开发者实战】多传感器融合算法在自动驾驶中的配置与优化

本文详细介绍了华为MDC平台在自动驾驶中多传感器融合算法的配置与优化实践。通过前融合与后融合技术,结合摄像头、激光雷达和毫米波雷达的数据,提升感知精度与可靠性。文章还分享了ARXML配置、标定技巧、算法调优及性能优化等实战经验,帮助开发者高效实现自动驾驶系统的传感器融合。

weixin_29214199的博客 515

abseil-cpp:增强C++标准库的开源集合

abseil-cpp:增强C++标准库的开源集合 【免费下载链接】abseil-cpp Abseil Common Libraries (C++) 项目地址: https://gitcode.com/GitHub_Trending...

gitblog_00465的博客 828

深度学习12—VGG19实现

state_dict = load_state_dict_from_url(model_urls['vgg19'],model_dir='./model' ,progress=progress)#预训练模型地址。accuracy=((out.argmax(1)==label).sum()).clone().detach().cpu().numpy()#正确预测的总和比测试集的长度,即预测正确的精度。image=torch.reshape(image,(1,3,224,224))#四维图形,RGB三个通。

m0_55196097的博客 2444

Weblogic安装与部署

27.免密登录,在目录Oracle\Middleware\Oracle_Home\user_projects\domains\base_domain\servers\AdminServer和Oracle\Middleware\Oracle_Home\user_projects\domains\base_domain\servers\Server-TA目录下,新建security\boot.properties文件,13.点击新建按钮,填写服务器名称,服务器监听地址,再点击下一步,最后点击完成。

m0_46259466的博客 6635

Cpp入门基础

定义命名空间,需要使⽤到namespace关键字,后⾯跟命名空间的名字,然后接⼀对{}即可,{}中 即为命名空间的成员。命名空间中可以定义变量/函数/类型等。namespace本质是定义出⼀个域,这个域跟全局域各⾃独⽴,不同的域可以定义同名变量,所以下 ⾯的rand不在冲突了。C++中域有函数局部域,全局域,命名空间域,类域;域影响的是编译时语法查找⼀个变量/函数/ 类型出处(声明或定义)的逻辑,所有有了域隔离,名字冲突就解决了。

2401_86658278的博客 5184

Qt开发者必看:QTimer::singleShot的5个实战避坑指南(含lambda和多线程案例)

本文为Qt开发者提供了QTimer::singleShot的5个关键实战避坑指南,涵盖lambda捕获、对象生命周期和多线程安全等核心难点。通过对比错误与正确代码示例,深入解析了如何避免悬空指针、确保线程执行上下文正确以及管理定时任务资源,帮助开发者编写更健壮、可靠的延迟执行代码。

stem5的博客 466

【C++】11 Visual Studio 2019 C++安装matplotlib-cpp绘图

使用C++调用matplotlib-cpp绘图

记录专业模型开发、算法程序设计、软件学习笔记、生活日志。 9394

【Arduino 动手做】六舵机自平衡 Rotary Stewart 平台

《Arduino六舵机自平衡Rotary Stewart平台项目》 该项目展示了一个基于Arduino的六自由度Rotary Stewart平台,通过六个舵机实现动态平衡控制。设计采用激光切割框架和TAMIYA 70171套件,提供详细组装指南和开源固件(GitHub可获取)。开发者丹·罗耶分享了3D打印文件、视频演示及运动学优化需求,强调该平台可扩展应用于游戏控制(如Kerbal Space Program)或教育领域。项目链接包含完整资源包,鼓励用户参与改进并分享创作成果。该案例体现了Arduino在机

雕爷学编程 1092

Buck电源设计常见的一些问题(四)MOS管振荡抑制方法(二)

另一方面,开关振铃为远超开关频率的高频振铃,并伴随很高的 dV/dt,会带来传导和辐射的 EMI 问题,可能会使得终端产品不能通过 EMI 标准测试,更严重时甚至会干扰开关电源自身的信号电路或临近的其他功能电路的正常工作。选用二极管反向特性好的器件;该电路可等效成图 3 中 LC 谐振电路,新的 LR和 CR为 Lp1、Lp5,Lp3, Lp4, CD等所有参与振铃的寄生感容的复合值。通常 Snubber 的 Csnub取值在数 nF 以上,在振铃频率 fR(加了 snubber 后)下的阻抗很小。

小幽余生不加糖 2892

CPP标准

‌C++标准‌是C++编程语言的规范,由国际标准化组织(ISO)制定。C++标准的发展历程可以追溯到1998年,当时ISO/IEC 14882:1998标准被发布,这被认为是第一个C++标准,常被称为C++98。随后,C++标准经历了多次更新和修订,包括C++03(2003年)、C++11(2011年)、C++14(2014年)和C++17(2017年)。

没有手牌的博客 1401

携程滑块、点选验证码登录识别逆向

本文分析了携程登录系统的风控机制,主要包含三种验证场景:无验证码、滑块验证码和二次图标点选验证码。通过跟踪risk_inspect风控接口,发现验证流程采用标准AES加密,需提交设备指纹等加密信息。当触发验证码时,需额外提交包含轨迹坐标的verify_msg参数及token/rid参数。最终通过风控检测后,需使用一致的指纹参数和验证token完成加密登录。文章强调所有分析仅用于学习,代码实现需确保符合法律规范。

码王吴彦祖的博客 1100

终极指南:如何快速解决RedPanda-CPP中C++与C标准库头文件兼容问题

RedPanda-CPP是一款轻量级C/C++ IDE,基于Qt框架开发,深受开发者喜爱。然而,在开发过程中,许多新手和普通用户经常会遇到C++与C标准库头文件的兼容问题,影响开发效率。本文将为你提供一套完整且简单的解决方案,帮助你轻松应对这些兼容性挑战。 ## 理解C++与C标准库头文件的差异 C++标准库在设计时考虑了对C标准库的兼容,但两者在头文件的命名和使用上存在一些差异。C标准库的头

gitblog_07865的博客 511

海康威视嵌入式最全面试题及参考答案(3万字长文)

主营业务:提供包括前端摄像头、后端存储设备、显示控制设备等在内的全方位视频监控解决方案。市场地位:在全球范围内享有较高的市场份额,在安防领域具有较强的竞争力。技术创新:持续投入研发,拥有多项核心技术和专利,特别是在视频处理算法、人工智能等方面取得了显著成果。社会责任:积极参与公共安全项目,为智慧城市、交通管理等领域提供技术支持和服务。国际业务:除了国内市场外,海康威视的产品和服务也销往全球多个国家和地区。面向对象编程。

大模型大数据攻城狮的专栏 1765

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

UTF8-CPP跨版本兼容性指南:从C++98到C++20的完整支持

UTF8-CPP是一个轻量级的C++库,专注于以可移植的方式提供UTF-8编码和解码功能,支持从C++98到C++20的全版本C++标准。无论是处理多语言文本还是确保跨平台字符编码一致性,这个库都能为开发者提供可靠的解决方案。 ## 为什么选择UTF8-CPP? 在C++开发中,字符编码处理常常是跨平台项目的痛点。UTF8-CPP通过模块化设计,为不同C++标准提供针对性实现,确保代码在各种编

gitblog_01046的博客 932

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

C++ Prime第十章

C++ Prime第十章 练习10.1 int main() { vector<int> data; int num, sum = 0; while (cin >> num) data.push_back(num); cout << "输入一个要查找的值: " << endl; int val; cin.clear(); cin >> val; sum = count(data.begin(), data.end(), v

weixin_42254068的博客 287

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

告别C++标准库痛点:Abseil-Cpp如何让你的代码效率提升30%?

你是否还在为C++标准库的性能瓶颈发愁?是否因跨平台兼容性问题反复修改代码?Abseil-Cpp(Abseil Common Libraries)作为Google开源的C++增强库集合,正以"标准库扩展"的定位解决这些痛点。本文将带你快速掌握这个被Google内部广泛采用的工具库,通过实战案例展示如何用它优化字符串处理、并发控制和时间管理,让你的C++项目开发效率提升30%。 ## 为什么选择A...

gitblog_01128的博客 379

C++23:下一个 C++ 标准

【编者按】C++23 是 C++20 之后的下一个 C++ 标准,它包含了对 C++ 的一系列改进,但对于 C++98、C++11 或 C++20 那样具有革命性的影响力较小,更像是 C++17 的延续。原文链接:http://modernescpp.com/index.php/c-23-the-next-c-standard未经允许,禁止转载!作者 | Rainer Grimm 译者...

优快云资讯 5354

C++---yaml-cpp YAML标准解析/生成库

yaml-cpp 是 C++ 实现的 YAML 1.2 解析/生成库,提供类型安全、高性能的配置处理能力。核心要点包括:1) 版本差异显著,0.5.x 与 0.6.x+ API 不兼容;2) 围绕 YAML::Node 实现数据操作,支持自动类型推导;3) 提供文件/字符串解析、多文档处理等完整读写功能。使用时需注意节点访问安全性和异常处理,推荐通过 CMake 集成新版库。该库是 C++ 生态中处理 YAML 的工业级解决方案。

MzKyle的博客 730

推荐开源项目:CPP C++ Papyrus

推荐开源项目:CPP C++ Papyrus 项目介绍 CPP C++ Papyrus 是一个全面的C++编程资源库,由Caio Rodrigues Soares精心编撰和维护。这个开源项目旨在为开发者提供C++语言的核心概念、标准库、工具以及各种应用领域的实例代码和示例。无论你是初学者还是经验丰富的程序员,都能在这个项目中找到你需要的知识点和实践案例。 项目技术分析 该项目涵盖了C++的各个方面...

gitblog_00003的博客 932

book-cpp-algorithms入门指南:C++标准算法库完全解析

book-cpp-algorithms是一个专注于C++标准算法库的开源项目,提供了全面的C++标准算法解析和示例代码。无论是C++初学者还是有经验的开发者,都能通过该项目深入理解和高效使用C++标准算法库,提升程序开发效率和代码质量。 ## 📖 项目概述:探索C++标准算法的宝库 book-cpp-algorithms项目结构清晰,主要分为多个模块,涵盖了C++标准算法的各个方面。其中,`

gitblog_00727的博客 860

Cppfront与Cpp2语法:探索C++的简洁安全新范式

Cppfront是一个实验性编译器项目,旨在为C++提供全新的语法形式(称为Cpp2或"C++语法2"),同时保持与现有C++生态系统的完全兼容。该项目由著名C++专家Herb Sutter发起,其核心理念是通过语法层面的创新,使C++代码编写变得更简单、更安全。 ## Cpp2语法特性解析 ### 设计哲学 Cpp2并非要创建一门全新的编程语言,而是作为C++的"另一种语法皮肤"。它保留了...

gitblog_01066的博客 612

makefile如何添加c++11标准?

在使用G++编译单个文件时,如果需要c++11标准的支持,直接在编译命令添加-std=c++11。 但是,如果是多个文件联合编译时,使用makefile文件,怎么添加c++11标准? 两种方式: 1)在makefile文件中的每个g++命令中加上-std=c++11;如下: hw07: test.o functions.o g++ -std=c++11 test.o functions.o -o hw07 test.o: test.cpp headerfile.h g++ -std=c++1

喜欢吃冰棍de谷利文君的博客 1万+

cpp-sort与标准库排序对比:为什么选择这款C++排序神器?

cpp-sort是一款专为C++设计的排序算法库,提供了丰富的排序算法和相关工具,相比标准库排序函数,它在性能、灵活性和功能丰富度上都有显著优势。无论是处理简单的整数排序,还是复杂的自定义类型排序,cpp-sort都能为你提供更高效、更专业的解决方案。 ## 性能对比:cpp-sort如何超越标准库? 当谈到排序性能,cpp-sort在多个方面展现出超越标准库`std::sort`的实力。在随

gitblog_00382的博客 665

C++标准库

C++标准库与Boost

programmerAlex的博客 1943
上一篇: 第九章:系统设计
下一篇: 第一章:系统设计概述
weisonx
博客等级 码龄9年 155粉丝 86原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weisonx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值