败犬日报 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
优化读写竞争的工具。