• 忘掉天地
  • 仿佛也想不起自己
bingliaolongBingliaolong  2025-03-21 13:02 Aet 隐藏边栏 |   抢沙发  3 
文章评分 3 次,平均分 5.0

语言特性

指定初始化

  1. 按名称初始化结构体成员,提高可读性

[[likely]][[unlikely]]

  1. 提示编译器分支预测优化

标准库新增组件

std::atomic_ref(原子引用)

概述

  1. C++20 引入的模板类,允许对 非原子类型 的对象进行原子操作
  2. 它的核心作用是为现有的非原子变量提供原子访问能力,无需修改原始变量的类型或声明方式
  3. 适用于需要临时或局部原子操作的场景

特性

  1. 非侵入式原子操作
    1. 对普通变量(非 std::atomic)进行原子操作,例如 intfloat 或自定义类型
  2. 轻量级封装
    1. 不拥有目标对象,仅提供对其的原子访问接口
  3. 内存顺序控制
    1. 支持标准内存序(如 memory_order_relaxedmemory_order_seq_cst
  4. 对齐要求
    1. 目标对象必须满足 std::atomic_ref<T> 的对齐要求(通常与 std::atomic<T> 一致)

场景

  1. 旧代码改造
    1. 无法修改原有变量的类型(例如第三方库中的全局变量),但需在多线程环境中安全访问
  2. 结构体成员原子化
    1. 对结构体中某个字段进行原子操作,无需将整个结构体声明为原子类型
  3. 临时原子操作
    1. 在特定代码段内需要原子性,但其他部分不需要

基本用法

  1. 原子化普通变量

  1. 原子化结构体成员

  1. 自定义类型的原子操作
    1. T 是自定义类型,需满足 std::atomic<T> 的要求(可平凡复制,支持按位原子操作):

  1. 内存序控制

其他重要改进

std::source_location(源码位置追踪)

概述

  1. C++20 引入的标准库工具,用于在代码中捕获调用点的源码位置信息(如文件名、行号、函数名等)
    1. 它取代了传统的 __FILE____LINE__ 宏,提供更安全、更灵活的方式记录代码上下文

作用

  1. 自动捕获调用点信息:
    1. 无需手动传递参数,自动记录日志、断言或调试信息的来源位置
  2. 类型安全:
    1. 通过结构体封装,避免宏的文本替换风险
  3. 支持编译期信息:
    1. 可在 constexpr 上下文中使用

示例

  1. 自动记录错误或日志的来源位置:

  1. 标记代码段的执行路径:

  1. 结合 constexpr 生成编译期信息:

std::remove_cvref

概述

  1. C++20 引入的类型萃取工具,用于同时去除类型的 引用修饰符(&&&)和 CV 限定符(constvolatile
    1. 等价于先应用 std::remove_reference 再应用 std::remove_cv,简化了类型处理的步骤

对比

类型萃取工具 功能 示例输入 输出
std::remove_reference_t 仅移除引用(&/&& const int& const int
std::remove_cv_t 仅移除 CV 限定符(const/volatile const volatile int int
std::remove_cvref_t 同时移除引用和 CV 限定符 const volatile int& int

使用场景

  1. 模板元编程中简化类型处理

  1. 避免重复嵌套类型萃取

示例

  1. 基本用法

  1. 处理模板参数

std::type_identity

概述

  1. C++20 引入的类型萃取工具,其核心作用是 保持类型不变,同时可用于控制模板参数推导或创建非推导上下文

功能

  1. 类型保持
    1. std::type_identity<T>::type 始终为 T,不修改任何类型修饰符(如 const、引用等)
  2. 非推导上下文
    1. 将类型 T 包裹在 std::type_identity 中,可阻止编译器自动推导模板参数,强制用户显式指定类型

场景

  1. 强制显式指定模板参数

  1. 解决函数模板重载歧义
    1. 当多个重载函数模板可能导致推导冲突时,std::type_identity 可强制类型匹配:

  1. 结合 SFINAE 控制模板实例化

示例

  1. 定义

  1. 示例

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

bingliaolong
Bingliaolong 关注:0    粉丝:0
Everything will be better.

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享