异常路径上漏掉的对象
场景:一个处理命令的程序遇到坏行会抛异常、由 main 统一计数。程序结束时打印的存活对象数本应是 0,可只要有坏行它就不是。 任务:用 RAII 改写 ~/work/raii/raii.cpp 里的 process():不再出现裸 new
把拷贝次数降到零
场景:一个处理大对象的程序最后会打印 copies=N。每一次拷贝都是一整块内存的复制,N 越大越慢。 任务:改 ~/work/move/move.cpp,不改第一行输出,把 Blob 的拷贝次数降到 0。编译成 ~/work/move/m
长长的模板报错
模板相关的编译错误往往有几十行。要找自己代码里出问题的位置,最该看的是【0】那一行。
少了比较运算
模板函数里写了 a < b,传进来的类型却没有 operator<,报错发生在【0】。
给结构体定义大小
补全 Ver::operator<:先比 major,再比 minor(都是小的在前)。输出 最大版本的标签/排序后的标签。 (本题用 g++ -std=c++17 -O0 编译。)
模板用在了不能比较的类型上
场景:一个通用的「挑最好的」模板函数,对整数用得好好的;换成商品结构体,编译器就吐出一大段看不懂的报错。 任务:读懂 ~/work/tmpl 里的编译错误,给 Item 补上需要的比较,让 g++ -std=c++17 -o app mai
模板报错是哪一行惹的
场景:一个文件里六处调用了同一个模板函数,编译时只打出一段错误,而且错误最先指向的是模板内部,不是你的代码。 任务:在 ~/work/tmpl2 里编译 bad.cpp(g++ -std=c++17 -c),找出是 bad.cpp 的哪一行
边遍历边插入
用范围 for 遍历一个 vector,循环里又对它 push_back,出问题的根本原因是【0】。
崩在哪一层
在 gdb 里运行程序崩溃后,查看此刻的函数调用栈,用的命令是【0】。
只处理原来的元素
对「原来的」每个偶数 x 在末尾追加 x/2,追加出来的数不再处理。修好循环,输出最终的数,逗号隔开。 (本题用 g++ -std=c++17 -O0 编译。)