跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C++

现代 C++ 核心特性简述

总结了现代 C++ 的主要版本特性,包括 C++11 的诊断库与元编程工具,C++17 的 std::optional 类型安全空值处理,以及 C++23 的 std::expected 错误处理和 std::scope_exit 资源管理。重点介绍了各特性的核心概念、API 用法及适用场景,旨在帮助开发者理解并应用新标准提升代码质量。

时间旅人发布于 2026/3/29更新于 2026/10/24109 浏览

C++11

C++11 是 C++ 自 C++98 以来的第二个重要更新。大量更新被引入标准,提升了 C++ 的抽象程度。

诊断库

<exception> 和 <system_error> 提供了异常处理头文件和系统错误头文件。

捕获和存储异常对象
uncaught_exceptions std::terminate();// 默认调用 std::abort
typedef void(*terminate_handler )(); // 返回 set 之前的值
std::terminate_handler set_terminate( std::terminate_handler f ) noexcept;
std::terminate_handler get_terminate() noexcept;

元编程库

C++ 提供元编程工具,如 type traits, compile-time rational arithmetic, and compile-time integer sequences. type traits 定义了编译时基于模板的类型属性查询接口。 一元 type traits 用于检查类型是 std::true_type / std::false_type。

<type_traits>

  • is_void: checks if a type is void
  • is_null_pointer: checks if a type is std::nullptr_t
  • is_integral: checks if a type is an integral type
  • is_floating_point: checks if a type is a floating-point type
  • is_array: checks if a type is an array type
  • is_enum: checks if a type is an enumeration type
  • is_union: checks if a type is a union type
  • is_class: checks if a type is a non-union class type
  • is_function: checks if a type is a function type
  • is_pointer: checks if a type is a pointer type
  • is_lvalue_reference: checks if a type is an lvalue reference
  • is_rvalue_reference: checks if a type is an rvalue reference
  • is_member_object_pointer: checks if a type is a non-static member object pointer
  • is_member_function_pointer: checks if a type is a non-static member function pointer
  • C++17

    std::optional

    std::optional<int> optInt;// 默认不包含值
    std::optional<std::string> optStr = "Hello";// 直接初始化
    std::optional<double> optDouble = std::nullopt;// 显式表示无值
    
    Column 1Column 2
    has_value()检查是否包含值 (bool 类型)
    value()获取值,若无值则抛出 std::bad_optional_access
    value_or(T default)返回值或默认值
    operator*解引用获取值(需确保有值)
    operator->访问成员(如 opt->size())
    reset()清除值,变为 std::nullopt
    使用场景
    1. 函数可能无返回值
    2. 避免特殊标记
    3. std::optional 提供了一种类型安全的方式处理'可能有值'的逻辑,避免了传统方法的潜在错误。

    C++23

    std::expected<T, E>

    核心概念

    https://github.com/martinmoene/expected-lite

    std::expected<T, E> 是一个模板类,包含两个可能的成员:

    • 期望值(Value):类型为 T 的有效结果。
    • 错误值(Error):类型为 E 的错误信息。 通过明确的类型区分,它强制开发者显式处理可能的错误,避免忽略错误检查的风险。
    主要特性
    1. 类型安全的错误处理 替代传统的错误码(如返回 int 错误码)或异常(try/catch),提供编译时的类型检查。 错误类型 E 可以是自定义类型(如枚举、结构体),增强错误信息的表达能力。
    Column 1Column 2
    has_value()检查是否包含有效值(返回 bool)。
    operator->访问有效值的成员(仅在包含有效值时可用)。
    operator*解引用有效值(仅在包含有效值时可用)。
    value()返回有效值,若无值则抛出 std::bad_expected_access。
    error()返回错误值,若存在有效值则抛出 std::bad_expected_access。
    使用场景
    1. 替代错误码 避免函数返回歧义的错误码(如 -1 或 nullptr),明确区分成功和失败的结果。
    2. 替代异常 在禁用异常的环境(如嵌入式系统)中,提供类型安全的错误传递机制。
    3. 链式操作 通过 transform 和 and_then 实现函数式编程风格的链式调用,简化错误处理逻辑。

    std::scope_exit

    template<typename EF>
    class scope_exit {
    public:
        explicit scope_exit(EF&& fn) : exit_function_(std::forward<EF>(fn)) {}
        ~scope_exit() {
            if (!flag_) exit_function_();
            flag_ = true;
        }
        void cancel() { flag_ = true; }
    private:
        EF exit_function_;
        bool flag_{false};
    };
    

    目录

    1. C++11
    2. 诊断库
    3. 捕获和存储异常对象
    4. 元编程库
    5. C++17
    6. std::optional
    7. 使用场景
    8. C++23
    9. std::expected<T, E>
    10. 核心概念
    11. 主要特性
    12. 使用场景
    13. std::scope_exit

    更多推荐文章

    查看全部
    • 金仓数据库 KingbaseES:多模融合架构与全场景替代方案
    • 使用 DeepSeek API 构建贪吃蛇游戏实战
    • Java 类加载机制与双亲委派模型深度解析
    • C++ string 类详解:构造、遍历与常用操作
    • Python 调用 Windows CMD 命令的多种实现方式
    • C++ STL list 容器底层实现详解
    • GitHub 教育认证通过后如何领取 Copilot Pro
    • C++ 核心基础:STL 容器、位运算与常用算法库
    • TensorFlow 安装教程
    • AIGC 插画创作技术解析与代码实战
    • Java 大模型应用项目实战:硅谷小智医疗助手
    • 2026 年 3 月 13 日 AI 热点:芯片大战、Agent 爆发、安全争议
    • AI 产品经理学习路线与核心技能指南
    • Python 语言特性、应用场景及发展趋势分析
    • AIGC 插画生成技术解析与 Python 代码实战
    • 基于阿里云号码认证的 Spring Boot 短信验证码登录方案
    • GLM-4.7 基于 vLLM Ascend 的 12 项核心性能优化实战
    • 前端动画库对比与实战指南:GSAP / Lottie / Swiper / AOS
    • 开源游乐场收银台与押金系统多场景收银能力设计
    • RNN 与序列数据处理实战:从原理到 LSTM 文本分类

    相关免费在线工具

    • Base64 字符串编码/解码

      将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

    • Base64 文件转换器

      将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

    • Markdown转HTML

      将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

    • HTML转Markdown

      将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online

    • JSON 压缩

      通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online

    • JSON美化和格式化

      将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online