Skip to content
败犬日报 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 子矩阵最大面积

经典面试题,单调栈 O(nm)