C++17和C++20引入的新特性

打印 上一主题 下一主题

主题 1497|帖子 1497|积分 4491

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
C++17

if constexpr

在编译的时间可以来决定是否编译某段代码,从而避免在运行的时间引入不必要的盘算
  1. template<typename T>
  2. void print_type() {
  3.     if constexpr (std::is_integral<T>::value) {
  4.         std::cout << "Integral type\n";
  5.     } else {
  6.         std::cout << "Non-integral type\n";
  7.     }
  8. }
复制代码
结构化绑定声明

指的是允许将元组或者多个返回值直接解构,越来越像python了
  1. std::tuple<int, double, std::string> get_values() {
  2.     return {42, 3.14, "Hello"};
  3. }
  4. auto [x, y, z] = get_values();  // 直接解构
复制代码
std::variant

允许变量持有多种不同类型,但只持有一个类型的值
  1. std::variant<int, float> v = 10;
  2. if (std::holds_alternative<int>(v)) {
  3.     std::cout << "It's an int: " << std::get<int>(v) << "\n";
  4. }
复制代码
对STL提供并行策略

  1. #include <algorithm>
  2. #include <vector>
  3. #include <execution>
  4. std::vector<int> v = {1, 2, 3, 4, 5};
  5. std::for_each(std::execution::par, v.begin(), v.end(), [](int& n) { n *= 2; });
复制代码
增强模板推导本领

C++20新特性

支持协程

引入likely/ unlikely

用于向编译器提示某个分支大概是常见或者不常见的,从而资助优化分支猜测
  1. if (condition) [[likely]] {
  2.     // 可能是常见的分支
  3. } else [[unlikely]] {
  4.     // 可能是少见的分支
  5. }
复制代码
concept

用于束缚模板类型,只接受模板参数类型为限定范围,从而增强安全性。
  1. template<typename T>
  2. concept Integral = std::is_integral<T>::value;
复制代码
在这里Integral即代表long、short、int等等,在利用的时间为
  1. template<Integral T>
  2. T add(T a, T b) {
  3.     return a + b;
  4. }
复制代码
接受参数是整数类型,假如传入的不满足这个类型,则编译器会报错。


总结

总的来说,C++17是扩充了语言的灵活度,长得越来越像python了。C++20更为革命性的特性是协程、概念、模块等,出于性能和安全做了优化。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

圆咕噜咕噜

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表