续写新篇 :解读C++20/23核心新特性

你好,我是吴咏炜。

继 2022 年的课程迭代之后,时隔两年,我计划再一次对专栏内容进行续写。这两年间,C++ 在语言特性、标准库等方面都有很多重要的更新,我对 C++ 语言也有了一些新的理解和感悟,这些都值得讨论一下。

比如说:范围和视图已经与我们专栏里讲过的有所不同,在数据处理的便利性和效率上持续提升,能更灵活地操作容器数据;C++ 标准库有一系列的增强,既有表达上的改进,也有性能上的提升;契约式设计能够增强代码的健壮性,更便于维护;等等。

基于此,我决定在专栏已有内容的基础上,补充如下内容(以实际上线为准):

  • 范围更新和视图

  • C++20 里的时间

  • std::format 和 std::print

  • 契约式设计

  • 一些 C++20/23 的重要更新

  • 静态反射更新和序列化

如果你有更多想要了解的内容,也欢迎在留言区告诉我!

精选留言

  • Geek_9efcf3

    2025-03-17 22:57:25

    吴老师的课程真是太良心了,持续在更新
    作者回复

    😇😎

    2025-03-19 15:52:29

  • 小样

    2025-03-25 22:13:11

    天啊,2年前的课程还有更新。感谢吴老师
    作者回复

    😇

    2025-03-31 11:04:46

  • 梦太晚

    2025-03-23 09:54:23

    老师 请问有什么好的通用方法可以把libstdc++和glibc和程序一起打包发到其他机器 然后程序去加载指定安装路径的stdlibc++和glibc 而不是去加载该机器默认路径的 我之前通过环境变量LD_LIBRARY_PATH去指定 但是整个回话也会影响,导致命令都用不了了
    作者回复

    可以在链接时使用

    g++ -Wl,-rpath='$ORIGIN/lib'



    g++ -Wl,-rpath='$ORIGIN'

    这样的写法,让程序到程序所在目录(的 lib 子目录)下去加载 .so 文件。

    另外,你也可以考虑在低版本的 Linux 下编译高版本的 GCC,然后用这个 GCC 来编译你的应用程序。这样,只需要使用新的 libstdc++,风险更低。

    2025-03-24 10:40:08

  • coming

    2025-03-13 15:32:17

    期待更新, 把公司的老项目从GCC4.8.5升到GCC7.3, 全是阻力, 升级之后, 其实也没遇到什么问题, 写的更舒服了
    作者回复

    是啊,有很多困难是想象出来的。GCC 5 之前的那个字符串的不兼容性,实际上真的硬要解决也是可以解决的——当然最好还是能够换新的ABI。

    2025-03-14 10:23:26