当前位置:首页>java>C++23 核心特性展示,知识点都在代码里了

C++23 核心特性展示,知识点都在代码里了

  • 2026-09-10 08:23:31
C++23 核心特性展示,知识点都在代码里了
我是一名软件工程师,自2006年开始学习《计算机科学与技术》专业课程,于2010年完成大学本科阶段的专业课学习并于同年参加工作。2010年至今一直在一线从事软件研发相关的工作,有着丰富的编程与踩坑经验,希望我的文章能给你带来些许帮助!

本文通过代码展示C++23版本的语言特性:聚焦错误处理、类型安全、容器操作等7大高频场景。

// C++23 特性演示:std::expected、std::print、//  std::span、std::to_underlying 等#include<array>#include<charconv>#include<expected>#include<format>#include<print>#include<span>#include<string>#include<string_view>#include<type_traits>#include<utility>#include<vector>using namespace std::literals;// 1. C++23 枚举类底层类型转换://    std::to_underlying(替代手动static_cast)enum class Color : uint8_t{    Red   = 1,    Green = 2,    Blue  = 3};// 2. C++23 std::expected:类型安全的错误处理[[nodiscard]] std::expected<int, std::string> ParseInt(std::string_view s){    int val;    // C++17/23 std::from_chars:高性能字符串转数值(无内存分配)    const auto [ptr, ec] = std::from_chars(s.data(), s.data() + s.size(), val);    if (ec == std::errc() && ptr == s.data() + s.size())    {        return val; // 成功:返回std::expected<int, ...>,存储有效值    }    return std::unexpected(std::string("解析失败:非有效整数")); // 失败:返回错误信息}// 3. C++23 std::span 增强:编译期固定大小、范围遍历voidDemoSpan(){    std::vector<int>   vec = {10, 20, 30, 40, 50};    std::array<int, 3> arr = {100, 200, 300};    std::print("\n=== std::span 增强(C++23)===\n");    // 动态大小span(适配任意连续容器)    std::span<int> s1(vec);    std::print("动态span遍历:");    for (int x : s1)        std::print("{} ", x);    std::print("\n");    // C++23 编译期固定大小span(更高效,编译期检查越界)    std::span<int, 3> s2(arr); // 大小3编译期确定    s2[1] = 250;               // 直接修改底层array    std::print("固定大小span遍历:");    for (int x : s2)        std::print("{} ", x);    std::print("\n");    // span切片(C++20/23):s.subspan(起始位置, 长度)    std::span<int> s3 = s1.subspan(1, 3);    std::print("span切片 [1,3):");    for (int x : s3)        std::print("{} ", x);    std::print("\n");}// 4. C++23 if consteval:编译期/运行期条件分支template <typename T>constexprautoGetValue(T val){    if consteval    {         // 编译期执行分支:仅当函数在常量表达式上下文中调用时        return std::format("编译期值:{}", val);    }    else    {         // 运行期执行分支:普通调用时        return std::format("运行期值:{}", val);    }}// 5. C++23 其他小特性演示voidDemoOtherFeatures(){    std::print("\n=== 其他C++23核心小特性 ===\n");    // (1) std::byteswap:通用字节交换(支持整数/枚举,跨平台)    uint32_t num     = 0x12345678;    uint32_t swapped = std::byteswap(num);    std::print("字节交换:0x{:x} -> 0x{:x}\n", num, swapped);    // (2) std::to_underlying:枚举类转底层类型(类型安全,无需手动static_cast)    Color c     = Color::Green;    auto  c_val = std::to_underlying(c);    std::print("枚举底层值:Color::Green -> {}\n", c_val);    // (3) C++23 std::print:格式化输出(替代printf/cout,更简洁、高效、类型安全)    std::string name    = "C++23";    double      version = 23.0;    std::print("格式化输出:Hello, {}! 版本:{:.1f}\n", name, version);    // (4) if consteval 编译期/运行期分支演示    constexpr int constexpr_val = 42;  // 编译期常量    int           runtime_val   = 100; // 运行期变量    std::print("if consteval(编译期):{}\n", GetValue(constexpr_val));    std::print("if consteval(运行期):{}\n", GetValue(runtime_val));}// 主函数:串联所有C++23特性演示intmain(){    try    {        // 演示std::print(C++23核心输出特性)        std::print("========== C++23 核心特性完整演示 ==========\n\n");        // 1. std::expected 错误处理        std::print("=== std::expected 类型安全错误处理 ===\n");        auto res1 = ParseInt("12345");        auto res2 = ParseInt("abc123");        if (res1)        {                                        // 直接判断是否成功(operator bool)            std::print("解析成功:{}\n", *res1); // 解引用获取有效值        }        if (!res2)        {            std::print("解析失败:{}\n", res2.error()); // error()获取错误信息        }        // 2. std::span 增强        DemoSpan();        // 3. 其他C++23特性        DemoOtherFeatures();        std::print("\n========== C++23 特性演示结束 ==========\n");        return 0;    }    catch (const std::exception& e)    {        std::print("异常:{}\n", e.what());        return 1;    }}

合作交流请扫码,喜欢,就 “关注+点赞+推荐+转发” 吧!

作者寄语
首先感谢所有能够认真读完我的文章的道友。在每篇文章发布前我都会做认真校对,但受限于作者知识的局限性,文章中也难免会出现一些瑕疵与错误的地方,如您阅读时发现错误,欢迎您留言或私信告诉我,我会做勘误处理。
关于写作的目的:此公众号的所有文章都是我在业余时间对自己知识体系梳理后的成果展现,之所以选择在公众号做输出,一是想给自己的知识找个家,方便自己翻阅;二是希望能够让我的文章能够帮助一些在编程领域还没入门的朋友;最后也是希望能有机会给自己加个鸡腿。
关于更新频率:因为我是利用业余时间写的文章,要保障文章的内容有价值且正确,所以我不能保证每天更新,但是尽量每周至少更新一篇。
如果我的文章对您有些许的帮助,您可以留言告诉我;如果您希望对某些知识点做更深入的了解与学习,也可以留言告诉我;最后感谢您对我的认可!

最新文章

随机文章