当前位置: 首页 > ds >正文

C++ 20 新增特性以及代码示例

目录

1. ‌概念(Concepts)‌

2. ‌协程(Coroutines)‌

3. ‌模块(Modules)‌

4. ‌三路比较运算符(<=>)‌

5. ‌范围库(Ranges)‌

6. ‌std::format格式化库‌

7. ‌constexpr增强‌

8. ‌std::span‌

9. ‌std::jthread‌

10. ‌consteval函数‌


以下是C++20的核心特性及代码示例说明:

1. ‌概念(Concepts)‌


约束模板参数类型,提升泛型编程的可读性和错误提示

template<typename T>
concept Integral = std::is_integral_v<T>;template<Integral T>
T add(T a, T b) { return a + b; }  // 仅接受整数类型
add(5, 3);     // 合法
add(2.5, 1.0); // 编译错误


2. ‌协程(Coroutines)‌


支持异步编程和生成器模式,通过挂起/恢复函数简化逻辑

#include <coroutine>
generator<int> range(int start, int end) {for (int i = start; i < end; ++i)co_yield i;  // 生成值并挂起
}
auto gen = range(1, 4);
std::cout << gen.next();  // 输出1


3. ‌模块(Modules)‌


替代传统头文件,减少编译依赖

// math.ixx(模块文件)
export module math;
export int add(int a, int b) { return a + b; }// main.cpp
import math;
int main() { add(2, 3); }


4. ‌三路比较运算符(<=>)‌


简化比较运算符的重载

struct Point {int x, y;auto operator<=>(const Point&) const = default;  // 自动生成==, <, >等
};
Point a{1, 2}, b{1, 3};
std::cout << (a < b);  // 输出true


5. ‌范围库(Ranges)‌


提供链式操作容器的现代方式

#include <ranges>
std::vector<int> v = {1, 2, 3, 4, 5};
auto even = v | std::views::filter([](int x) { return x % 2 == 0; });
for (int i : even) std::cout << i;  // 输出2 4


6. ‌std::format格式化库‌


类型安全的字符串格式化

#include <format>
std::string s = std::format("{} + {} = {}", 2, 3, 5);  // "2 + 3 = 5"


7. ‌constexpr增强‌


支持动态内存分配和虚函数

constexpr int compileTimeSum() {int* arr = new int[3]{1, 2, 3};  // 编译期分配int sum = arr[0] + arr[1];delete[] arr;return sum;
}
static_assert(compileTimeSum() == 3);


8. ‌std::span‌


轻量级非拥有视图,安全访问连续内存

int arr[] = {1, 2, 3};
std::span<int> s(arr);
s[1] = 42;  // 修改arr[1]


9. ‌std::jthread‌


自动合并的线程类型

#include <thread>
std::jthread t([] { std::cout << "Thread running"; });  // 析构时自动join


10. ‌consteval函数‌


强制编译时求值的函数

consteval int square(int n) { return n * n; }
constexpr int x = square(5);  // 必须在编译期计算


这些特性显著提升了代码的简洁性、安全性和性能

http://www.xdnf.cn/news/20524.html

相关文章:

  • 同态加密库(Google FHE)
  • 神经网络的初始化:权重与偏置的数学策略
  • C# WinForm分页控件实现与使用详解
  • B.50.10.09-RPC核心原理与电商应用
  • MATLAB R2025a安装配置及使用教程(超详细保姆级教程)
  • 什么是云手机?
  • Vue3 - Echarts自定义主题引入(Error:ECharts is not Loaded,Error:default ,Error:module)
  • 攻击服务器的方式有哪些,对应的应对策略有哪些?
  • 联邦学习论文分享:Towards Building the Federated GPT:Federated Instruction Tuning
  • Leetcode hot100 最长连续序列
  • rh134第五章复习总结
  • SDRAM详细分析-08 数据手册解读
  • AI + 办公工具 = 应用案例
  • (论文速读)视觉语言模型评价中具有挑战性的选择题的自动生成
  • 大模型推理时的加速思路?
  • RabbitMq 初步认识
  • 自动化运维之ansible
  • LwIP入门实战 — 3 LwIP的网络接口管理
  • HTB devvortex
  • 【混元AIGC+腾讯云智能体+首创Coze核心流思维导图MCP】:打造一个文思通-智能写作助手Agent
  • 深入浅出 JVM 类加载器:分类、双亲委派与打破机制
  • 使用函数调用对整形数组进行排序
  • 贪心算法在医疗影像分割中的应用详解
  • 小型磨床设计cad+三维图+设计说明书
  • 代理连接性能优化:提升网络效率的关键技术与实践
  • 表格识别技术:通过计算机视觉和OCR,实现非结构化表格向结构化数据的转换,推动数字化转型。
  • Python中不定长参数的基础使用
  • 网络基础篇---以太网链路聚合(静态LACP方式)
  • C++ 面试高频考点 LCR 137. 点名 二分查找 题解 每日一题
  • Vue 项目性能优化实战