败犬日报 2026-01-14
败犬日报 2026-01-14
1. C++ 有哪些奇技淫巧?(文章)
https://www.zhihu.com/question/27338446/answer/1994349850469365515
奇怪的知识增加了。
2. 关于 container_of 的未定义行为
container_of 在 C 里有争议(但是广泛使用,不会出问题),但是 C++ 里是没有争议的 UB(但也是广泛使用)。
一般来说 container_of 定义是 #define container_of(ptr, type, member) ((type *)((char *)(ptr) - offsetof(type, member))),UB 发生出在减法越界,往期聊过这个问题。
例如:
cpp
void unknown(int*);
struct A { int x, y, z; };
bool foo() {
A a{0, 1, 2};
unknown(&a.y);
return a.x == 0 && a.z == 2; // 可能优化为永真,当然事实上不会这么优化
}