C++23

来自维基百科,自由的百科全书

C++23,正式名称ISO/IEC 14882:2024[1],是继C++20之后的C++编程语言开放标准。2020年2月,在布拉格举行的C++20最终会议上,通过了C++23的总体计划。[2][3]第一次针对C++23的WG21会议原定于2020年6月在瓦尔纳举行,但由于2019冠状病毒病疫情而被迫取消。[4][5]原定于2020年11月在纽约召开的会议也被取消。[6] 该标准于2023年2月由WG21在伊瑟阔举行的混合会议上从技术上最终确定。[7]

新的“Hello, world”示例

C++23引入了一些新功能,新的Hello, world程序示例如下:

#include <print>

int main()
{
    std::println("Hello, world!");
}

特性

被接受纳入 C++23 的变更包括:

语言特性

  • 显式 this 对象参数[8]
  • if consteval[9]
  • 多维下标运算符[10]
  • 静态调用运算符、静态下标运算符和静态 lambda[11][12]
  • 简化隐式移动(implicit move)[13]
  • auto(x)auto{x} 初始化[14]
  • 新的预处理指令:
  • 在基于范围的 for 循环中延长某些临时对象的生命周期[17]
  • 新的标准属性 [[assume(expression)]][18]
  • 继承构造函数的类模板参数推导[19]
  • 复合语句(compound statement)末尾的标签(label)[20]
  • 初始化语句(init-statement)中允许别名声明(alias declaration)[21]
  • std::size_t 及其对应有符号类型添加字面量后缀[22]
  • 扩展浮点类型及其字面量(有条件支持)[23]
  • 允许可选省略零参数 lambda 表达式中的 ()[24]
  • Lambda 表达式上的属性支持[25]
  • constexpr 相关改动:
    • constexpr 函数中允许非字面量变量、标签(label)与 goto 语句[26]
    • 允许在 constexpr 函数中使用 staticthread_local 变量(只要可用于常量表达式)[27]
    • constexpr 函数不再要求返回类型与参数类型是字面量类型
    • 现在可以编写即使没有任何调用符合核心常量表达式要求的 constexpr 函数[28]
  • static_assertif constexpr 中的上下文收窄转换(contextual conversion)收窄到 bool[29]
  • 在行拼接(line splicing)之前修剪空白字符[30]
  • 强制声明顺序决定内存布局[31]
  • 分隔的转义序列(delimited escape sequences)[32]
  • 命名的通用字符转义(named universal character escapes)[33]
  • 文本编码相关变化:
    • 支持将 UTF-8 作为可移植的源文件编码[34]
    • 字符字面量编码一致性[35]
    • 字符集与编码相关说明[36]

标准库

标准库模块支持

协程库支持

  • 用于范围的同步协程 std::generator[38]

通用工具支持

  • 结果类型 std::expected[39]
  • std::optional[40]std::expected[41] 添加单子操作
  • 用于获取枚举底层值的工具函数 std::to_underlying[42]
  • 仅可移动的可调用包装器 std::move_only_function[43]
  • std::forward_like[44]
  • std::invoke_r[45]
  • std::bind_back[46]
  • std::byteswap[47]
  • std::unreachable:标记不可达代码的函数[48]
  • 使 std::tuple 与其他“类似元组”的对象兼容[49]
  • std::reference_wrapper 提供 std::basic_common_reference 特化以生成引用类型[50]
  • std::pair 的转发构造函数添加默认参数[51]

编译时支持

  • 对以下内容添加 constexpr 支持:
    • std::type_info::operator==[52]
    • std::bitset[53]
    • std::unique_ptr[54]
    • 部分 <cmath> 函数[55]
    • std::to_charsstd::from_chars 的整型重载[56]
  • 元编程工具:
    • 类型特性 std::is_scoped_enum[57]std::is_implicit_lifetime[58]std::reference_constructs_from_temporarystd::reference_converts_from_temporary[59]
  • 为比较概念添加仅可移动类型支持[60]

注释

另见

Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.