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

【简述】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.xdnf.cn/news/16507.html

相关文章:

  • 从UX到AX:从“设计路径”到“共创关系”的范式革命——Agentic Experience如何重塑未来产品哲学
  • 秋招Day19 - 分布式 - 限流
  • 数据科学与大数据技术专业的核心课程体系及发展路径全解析
  • 从0开始学linux韦东山教程Linux驱动入门实验班(5)
  • 基于华为ENSP的OSPFLSA深入浅出-0
  • 元宇宙新基建:重塑数字市场的“超大陆”边界
  • LeetCode 895:最大频率栈
  • 6G通感算
  • 利用DeepSeek解决kdb+x进行tpch测试的几个问题及使用感受
  • 阿里开源Qwen3-Coder,编程大模型进入高效时代
  • [Python] -进阶理解7- Python中的内存管理机制简析
  • 详解Aerospike数据库在Linux系统上的安装流程
  • Django项目开发技巧
  • MySQL相关概念和易错知识点(2)(表结构的操作、数据类型、约束)
  • 零基础学习性能测试第三章:jmeter线程组组合
  • Matrix Theory study notes[5]
  • ​​XSLT:XML转换的“魔法棒”​
  • 用Java实现rpc的逻辑和流程图和核心技术与难点分析
  • Python day25
  • 什么是JUC
  • 基于tk界面库的扩展类
  • Go by Example
  • 深入解析命名管道:原理、实现与进程间通信应用
  • 深入React框架:构建现代前端应用的全面指南
  • Vue当中背景图无法占满屏幕的解决方法
  • 使用FRP搭建内网穿透工具,自己公网服务器独享内外网端口转发
  • Ubuntu 22.04 配置 Zsh + Oh My Zsh + Powerlevel10k
  • 物联网统一网关:多协议转换与数据处理架构设计
  • HiggsAudio-V2: 融合语言与声音的下一代音频大模型
  • 【企业架构】TOGAF概念之二