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

【简述】C++11/14/17/20/23 中的关键新特性

一、C++11 的主要新特性(“现代 C++”的起点)

1. 自动类型推导 auto

        自动推导变量类型,避免冗长声明

auto x = 10;       // int
auto s = "hello";  // const char*

2. 范围 for 循环

std::vector<int> v{1, 2, 3};
for (auto val : v) {std::cout << val << std::endl;
}

3. 右值引用(&&)与移动语义

        优化性能,避免不必要的拷贝

std::vector<int> foo() { return std::vector<int>{1, 2, 3}; }std::vector<int> v = foo(); // 移动构造

4. 智能指针 std::unique_ptrstd::shared_ptr

        自动释放资源,避免内存泄漏。

auto ptr = std::make_unique<int>(10);

5. nullptr 替代 NULL

void func(int* p);
func(nullptr);  // 更安全,避免歧义

二、C++14 的新特性(小而精)

1. 返回类型推导

auto add(int a, int b) {return a + b;
}

2. 通用 Lambda 表达式

        Lambda 参数支持 auto,适用于模板编程

auto add = [](auto a, auto b) { return a + b; };

3. 二进制字面量

int x = 0b1101;  // 等于 13

三、C++17 的新特性(实用增强)

1. 结构化绑定

std::tuple<int, std::string> t{1, "hello"};
auto [id, name] = t;

2. if constexpr(编译期条件)

        用于模板元编程,替代 SFINAE

template<typename T>
void print(T val) {if constexpr (std::is_integral_v<T>) {std::cout << "整数: " << val << "\n";} else {std::cout << "其他: " << val << "\n";}
}

3. std::variantstd::optional

std::optional<int> maybeInt = std::nullopt;
std::variant<int, std::string> v = "hello";

4. inline 变量

        解决头文件中全局变量多次定义问题

inline int globalCount = 0;

四、C++20 的重大突破

1. 概念(Concepts)

        用于限制模板类型,提高可读性和错误提示质量

template<typename T>
concept Addable = requires(T a, T b) {a + b;
};template<Addable T>
T add(T a, T b) {return a + b;
}

2. 协程(coroutines)

        可用于异步任务、生成器等

std::generator<int> gen() {for (int i = 0; i < 10; ++i)co_yield i;
}

3. 范围(ranges)

        函数式风格处理集合

#include <ranges>
auto evens = std::views::iota(1, 100) | std::views::filter([](int i) { return i % 2 == 0; });

4. 三路比较 <=>(太空船操作符)

        自动生成 <, ==, >

struct A {int x;auto operator<=>(const A&) const = default;
};

五、C++23(增强质量与实用)

1. std::expected

        替代 std::optional 和异常的错误处理

std::expected<int, std::string> safe_div(int a, int b) {if (b == 0) return std::unexpected("Divide by zero");return a / b;
}

2. if consteval

        用于在编译时判断是否为常量求值

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

3. 多维数组支持 mdspan(新库)

        标准化了高效、多维数组访问

标准关键新特性
C++11auto, nullptr, Lambda, 智能指针, 右值引用, 移动语义
C++14返回类型推导,通用 Lambda,二进制字面量
C++17结构化绑定, if constexpr, variant, optional, inline 变量
C++20Concepts, Coroutines, Ranges, <=>, Modules(模块)
C++23std::expected, consteval, if consteval, 多维数组支持(mdspan)

写在最后

        C++ 从 C++98 到 C++23,经历了从手工管理内存的语言向现代安全高效表达式的演化,新特性为我们带来了更优雅的语法、更强的性能控制以及更安全的工程实践方式

        未来是现代 C++ 的时代

http://www.lryc.cn/news/600964.html

相关文章:

  • 无源域自适应综合研究【3】
  • ts-node 深入全面讲解
  • IntelliJ IDEA 的“缩短命令行”:解决长类路径的利器
  • 《Moco: Momentum Contrast for Unsupervised Visual Representation Learning》论文精读笔记
  • CentOS 7 安装 MySQL 8.4.6(二进制包)指南
  • 学习嵌入式的第三十一天-数据结构-(2025.7.23)网络协议封装
  • Houdini快速模拟烟雾
  • 从0开始学linux韦东山教程Linux驱动入门实验班(5)
  • ThreadLocal--ThreadLocal介绍
  • SGLang 核心技术详解
  • 20250726-3-Kubernetes 网络-Service三种常用类型_笔记
  • 创建 Vue 项目的 4 种主流方式
  • 嵌入式——C语言:指针②
  • 智慧城市多目标追踪精度↑32%:陌讯动态融合算法实战解析
  • 【科普】java和html和lvgl生成页面有什么区别,还有什么方法可以生成?
  • Python深入 Tkinter 模块
  • OpHReda精准预测酶最佳PH
  • Ubuntu 22.04 配置 Zsh + Oh My Zsh + Powerlevel10k
  • dify前端应用相关
  • 超时进行报警例子
  • 成都陆军学校计算机科学学院编程马拉松活动计划书
  • linux线程概念和控制
  • java服务线程泄露临时解决脚本
  • .bat 打开方式恢复
  • QT中启用VIM后粘贴复制快捷键失效
  • CSS变量与Houdini自定义属性:解锁样式编程新维度
  • Aerospike架构深度解析:打造web级分布式应用的理想数据库
  • 数据科学与大数据技术专业的核心课程体系及发展路径全解析
  • TIM 输入捕获
  • 【AcWing 143题解】最大异或对