假如我号称精通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++ 这门语言,就是为了折磨人的。
免责声明:本文由卡卷网编辑并发布,但不代表本站的观点和立场,只提供分享给大家。
相关推荐

你 发表评论:
欢迎