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

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

C++17

if constexpr

在编译的时候可以来决定是否编译某段代码,从而避免在运行的时候引入不必要的计算

template<typename T>
void print_type() {
    if constexpr (std::is_integral<T>::value) {
        std::cout << "Integral type\n";
    } else {
        std::cout << "Non-integral type\n";
    }
}

结构化绑定声明

指的是允许将元组或者多个返回值直接解构,越来越像python了

std::tuple<int, double, std::string> get_values() {
    return {42, 3.14, "Hello"};
}

auto [x, y, z] = get_values();  // 直接解构

std::variant

允许变量持有多种不同类型,但只持有一个类型的值

std::variant<int, float> v = 10;
if (std::holds_alternative<int>(v)) {
    std::cout << "It's an int: " << std::get<int>(v) << "\n";
}

对STL提供并行策略

#include <algorithm>
#include <vector>
#include <execution>

std::vector<int> v = {1, 2, 3, 4, 5};
std::for_each(std::execution::par, v.begin(), v.end(), [](int& n) { n *= 2; });

增强模板推导能力

C++20新特性

支持协程

引入likely/ unlikely

用于向编译器提示某个分支可能是常见或者不常见的,从而帮助优化分支预测

if (condition) [[likely]] {
    // 可能是常见的分支
} else [[unlikely]] {
    // 可能是少见的分支
}

concept

用于约束模板类型,只接受模板参数类型为限定范围,从而增强安全性。

template<typename T>
concept Integral = std::is_integral<T>::value;

在这里Integral即代表long、short、int等等,在使用的时候为

template<Integral T>
T add(T a, T b) {
    return a + b;
}

接受参数是整数类型,如果传入的不满足这个类型,则编译器会报错。

总结

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

相关文章:

  • 【CC2530 教程 一】lAR Embedded Workbench创建CC2530基础工程
  • 数据结构--二叉排序树
  • 【Spring篇】Spring的生命周期
  • C语言枚举类型详解
  • [特殊字符] 2025蓝桥杯备赛Day11——P11041 [蓝桥杯 2024 省 Java B] 报数游戏
  • Java 列表复制与对象引用
  • Python学习第二十五天
  • 10 个pygame经典小游戏
  • 装饰器模式 (Decorator Pattern)
  • SpringCloud消息总线:Bus事件广播与配置动态刷新
  • 基于硅基流动平台API构建定制化AI服务的实践指南
  • 大数据学习(88)-zookeeper实现的高可用(HA)
  • 【JSqlParser】Java使用JSqlParser解析SQL语句总结
  • 垃圾回收学习
  • “thrust“ has no member “device“
  • 视觉Transformer架构的前沿优化技术与高效部署
  • Linux 驱动总线中的 ACPI 设备匹配机制是怎么回事儿?【最大特点是设备的自动发现和热插拔性能良好】
  • vue 组件开发
  • C++运动控制卡开发实践指南
  • 【pm2运行ts的终极解决方案】使用pm2+ tsx 运行 TypeScript 文件指南
  • 商业政府网站cms/百度推广代理公司
  • 石岩做网站哪家好/中国万网域名注册官网
  • 建设银网官方网站/seo搜索引擎优化就业指导
  • 独立网站商城/大连网站建设
  • 婚恋网站建设方案/黑帽seo排名
  • 用php做网站需要什么/有产品怎么找销售渠道