败犬日报 2026-01-23
败犬日报 2026-01-23
1. void* 不能指针算术
所有指向不完整类型的指针都不能解引用、不能做指针算术。
2. on vector<bool>(文章)
https://isocpp.org/blog/2012/11/on-vectorbool
介绍了一个优化,不过几乎没有标准库实现有做。
3. 不同 TU 的同名 lambda 全局变量会报链接错误吗
这其实取决于编译器是否生成了符号。下面这个代码,用 GCC 10+ 编译可以得到符号 f。
cpp
auto f = [] {};g++ test.cpp -c -o test.o && nm test.o - 0000000000000000 B f
Clang / GCC 9- 不生成符号,因为 lambda 只在内部使用,别的 TU 无法获得这个变量(这样的定义没办法写声明),就不需要生成符号。
由于 ODR 违背是 UB,那么有没有链接错误都是符合预期的。这里详细说明一下,链接属于实现层面,标准只定义了 ODR,违背这个规则就是 UB。标准不会规定具体符号怎么生成,链接怎么做。
我们换个思路让 Clang 生成符号,比如:
cpp
inline auto g = [] {};
// extern decltype(g) f;
auto f = g;虽然 f 还是 lambda 类型,但是 f 可以被声明成 extern decltype(g) f;,所以 Clang 不得不生成了符号 f。
4. python 为什么是 for key in dict 而不是 for key, value in dict
大概与 k in dict 而不是 (k, v) in dict 有些关系。
5. 面试题,求 01 矩阵中全 1 子矩阵最大面积
经典面试题,单调栈