卡卷网
当前位置:卡卷网 / 每日看点 / 正文

假如我号称精通C++,你作为考官准备怎么难住我?

作者:卡卷网发布时间:2025-04-17 23:06浏览数量:20次评论数量:0次

如果你号称精通 C++,我只问你几个问题,看看你是不是“真精通”。


1. C++ 细节陷阱:这些代码会输出什么?

#include <iostream> using namespace std; void test(int&& x) { cout << "Rvalue\n"; } void test(int& x) { cout << "Lvalue\n"; } int main() { int a = 10; test(std::move(a)); }

问题:输出是 "Rvalue" 还是 "Lvalue"?如果你犹豫了,那你不是真精通。


2. 面试官的阴谋:给你一个 Bug 让你修

场景

“我们线上系统偶尔崩溃,怀疑和 std::vector 相关,请你找出潜在问题。”

然后给你这段代码:

std::vector<int> vec = {1, 2, 3, 4}; int* p = &vec[2]; vec.push_back(5); std::cout << *p << std::endl;

问题:输出结果是多少?会不会崩溃?为什么?


3. sizeof 也有坑?

struct A { virtual void foo() {} }; struct B : A { virtual void foo() {} void bar() {} };

问题sizeof(A) == sizeof(B) 吗?为什么?


4. std::map 自定义比较器的坑

#include <map> struct Cmp { bool operator()(const int& a, const int& b) { return a > b; // 这里改成 a >= b 会发生什么? } }; int main() { std::map<int, int, Cmp> mp; mp[1] = 10; mp[1] = 20; std::cout << mp.size() << std::endl; }

问题mp.size() 输出多少?如果 operator() 改成 a >= b,会发生什么?


如果你全都会,那确实是大佬;如果你不会,那也没关系,C++ 这门语言,就是为了折磨人的。

END

免责声明:本文由卡卷网编辑并发布,但不代表本站的观点和立场,只提供分享给大家。

卡卷网

卡卷网 主页 联系他吧

请记住:卡卷网 Www.Kajuan.Net

欢迎 发表评论:

请填写验证码