当前位置: 首页 > 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.dtcms.com/a/299675.html

相关文章:

  • MPI练习:前缀和问题
  • 泛微OA8前台SQL注入
  • GPU运维常见问题处理
  • [硬件电路-93]:模拟器件 - 晶体管的静态工作点,让晶体管工作在其放大电路舞台的中央!!!
  • 企业级 AI 工具选型报告:9 个技术平台的 ROI 对比与部署策略
  • JavaScript:现代Web开发的核心动力
  • 无刷电机行业新一代AI智能化MES系统解决方案
  • LLM参数优化算法与经典理论揭秘
  • JVM 基础架构全解析:运行时数据区与核心组件
  • flask健康减脂饮食推荐—计算机毕业设计源码—07378
  • Oracle 误删数据恢复
  • BGP路由协议-LOCAL_PREF、AS_PATH和MED等属性
  • 【科研绘图系列】R语言绘制误差连线散点图
  • 知识图谱的初步探索
  • Nuxt 4:前端开发的全新篇章
  • 不正确的 clone() 方法实现与修复方案
  • 全能扩展,经济高效| 触想新款工控机化身工业自动化应用多面帮手
  • uniapp 自定义tab栏切换
  • RoPE:相对位置编码的旋转革命——原理、演进与大模型应用全景
  • 【C/C++】explicit_bzero
  • windows安装mysql8缺少时区信息
  • C语言开发工具Win-TC
  • Flask input 和datalist结合
  • C语言数据结构笔记6:函数指针的使用
  • 5. 流程控制语句
  • 哈希指针与数据结构:构建可信数字世界的基石
  • 记一次腾讯云临时密钥接管存储桶
  • obd运维OceanBase数据库的常见场景
  • C++11特性详解(上)
  • 解决使用vscode连接服务器出现“正在下载 VS Code 服务器...”