Skip to content

败犬日报 2025-07-06

1. std::println 打印指针类型

cpp
#include <print>

int main() {
    struct A {};
    A *a = nullptr;
    std::println("{}", a);  // error: static assertion failed: std::formatter must be specialized for each type being formatted
}

转成 void* 才能打印。

2. 多线程读写,读加 volatile 或写加 volatile 这样对吗

volatile 阻止编译器优化成寄存器,保证这个变量会读写内存,但不阻止重排。

例如读加 volatile 但不同步,编译器可以直接假设这个东西没有被修改过;写加 volatile 但不同步,编译器可以一直不写回(先执行后面的代码),只要最终写回即可。

推荐阅读:再谈C++原子操作与内存屏障 https://zhuanlan.zhihu.com/p/27554789673 谈谈 C/C++ 中的 volatile https://zhuanlan.zhihu.com/p/33074506

3. rcu (read-copy-update) 和 hzptr(冒险指针)已经进了 C++26

优化读写竞争的工具。