【 C++ 20 相比 C++ 11 的所有区别的详细介绍】

C++ 20 是 C++ 语言的最新版本,其中包含了许多新的特性和改进,这些特性可以帮助 C++ 开发者编写更简洁、更安全、更高效的代码。

一、语言基础方面的改进

  1. 标准库新增的特性:

C++ 20 引入了一些新的标准库特性,包括:

  • 对于 std::span 的支持:std::span 是一个非拥有的指向一块连续内存区域的视图,该内存区域可以是数组、容器或其他连续内存块。std::span 在C++ 20中被加入标准库>,并可用于指针、数组和 STL 容器的可插拔“切片”。std::span 有助于减少指针和迭代器使用时的错误,并提高代码的可读性。

  • 对于 std::ranges 的支持:std::ranges 是一个新的库,提供了一组算法和视图,这些算法和视图适用于各种数据结构,包括数组、列表和关联容器等。该库与 STL 容器和算
    法紧密结合,提高了代码的可读性和可维护性。

  • 支持 std::atomic_ref 类型:std::atomic_ref 是一个轻量级的原子类型,用于在多线程环境下对共享数据进行原子操作,提供了与 std::atomic 类型相同的功能,但使用
    更少的内存和更高的性能。

  • 支持 std::span 和 std::array 之间的相互转换:C++ 20 支持在 std::span 和 std::array 之间进行相互转换,这可以提高代码的可读性和可维护性。

  1. 语言语法的改进:
  • constexpr if 语句:C++ 20 引入了 constexpr if 语句,它是一种编译期条件语句,允许程序员在编译期间决定是否编译某个代码块。constexpr if 语句可以替代传统的>条件语句,例如 if/elseswitch/casetemplate specializationSFINAE 等。
template<typename T>
void foo(const T& t) {
   
  if constexpr (std::is_integral<T>::value) {
   
    std::cout << t * 2 << std::endl;
  } else {
   
    std::cout << t << std::endl;
  }
}

int main() {
   
  foo(10); // 输出 20
  foo("hello"); // 输出 hello
  return 0;
}
  • 模块(Module):C++ 20 引入了模块机制,该机制可以帮助 C++ 开发者
module;

export int square(int x) {
   
  return x * x;
}

在上面的代码中,我们首先使用 module; 指令声明该文件是一个模块。然后我们使用 export 关键字导出了一个函数 square,该函数返回传入参数的平方。在其他文件中,
我们可以使用 import 关键字引入该模块,并调用其中的函数:

import square;

int main() {
   
  std::cout << square(10) << std::endl; // 输出 100
  return 0;
}
  • 三个新的操作符:

C++ 20 引入了三个新的操作符:

  • 次序操作符 <=>:次序操作符是一种用于比较两个值的操作符,它返回一个 std::strong_ordering 类型的值。该操作符可以用于任意支持比较的类型,包括内置类型、用户
    自定义类型和迭代器等。
bool cmp(const std::string& a, const std::string& b) {
   
  return (a.size() <=> b.size()) < 0;
}

int main() {
   
  std::vector<std::string> v{
   "apple", "banana", "cherry"};
  std::sort(v.begin(), v.end(), cmp);
  for (const auto& s : v) {
   
    std::cout << s << std::endl;
  }
  return 0;
}
  • 将值移入 bit-field 中的操作符 <<=>>=:该操作符允许将值移入 bit-field 中。在 C++ 20 之前,要将值移入 bit-field 中通常需要使用位掩码和位运算符。
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值