继承与多态
构造函数里调虚函数会静默降级成基类版本、虚函数的默认参数按静态类型取、对象切片把 72 字节压成 8 字节——继承的规则一条条用输出验证。
构造函数里调虚函数会静默降级成基类版本、虚函数的默认参数按静态类型取、对象切片把 72 字节压成 8 字节——继承的规则一条条用输出验证。
每个版本到底解决了什么问题,以及一份本机 g++ 13.1.0 的实测支持矩阵——std::expected 已经能用,而 std::print、mdspan、deducing this 还不行。
std::move 一个字节都不搬、被移动对象必须处于"有效但未定"状态、return std::move(local) 会让复制消除退化成一次移动——全部用计数器实测。
两条反汇编指令看清虚函数调用的代价——mov (%rcx),%rax 加 jmp *(%rax);多继承下同一个对象的两个基类指针地址不同;dynamic_cast 比 static_cast 慢 3.7 倍。
构造中途抛异常时哪些资源会被释放、手写一个 20 行的 scope guard、非虚析构 delete 让派生类析构次数为 0,以及 rule of zero 到底怎么落地。
unique_ptr 真的是零开销吗、make_shared 省掉的那次分配是什么、循环引用怎么把对象留在内存里——用 sizeof 和 new 计数器实测。
30 万次查找实测:map 比 unordered_map 慢 10 倍,sorted vector 二分反而快过 set;operator[] 会偷偷插入,reserve 让 push_back 快 2.4 倍。
完美转发到底省掉多少次拷贝(实测 100 次调用零拷贝)、函数模板为什么不能偏特化、以及一个反常识结论:concepts 的报错行数比无约束版更多,但它把错误停在了调用点。