给结构体定义大小
补全 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 编译。)
照出迭代器失效
场景:一个小程序跑了很久都没出过问题,直到换了一台机器、换了一批数据,它开始偶尔输出乱码。代码评审时有人说:这里有未定义行为。 任务:先用 AddressSanitizer 编译并运行 ~/work/ub/dup.cpp,看它报什么,再把问
崩溃栈顶是哪个函数
场景:一个库存程序处理一批命令时突然 Segmentation fault,除此之外什么都没说。 任务:在 ~/work/crash 里编译运行 crash.cpp(输入是 ops.txt),找出程序崩溃时正在执行的函数的全名(带命名空间)
按值传容器
函数参数写成 std::vector<std::string> v(按值传递),每调用一次都会【0】。
两种拼接
循环里 s = s + w; 比 s += w; 慢得多,是因为前者【0】。