中科合讯 C++开发 一面

1. 类和 struct 的区别是什么

答案:在 C++ 里,classstruct 本质上非常接近,最核心的区别只有两个:默认访问权限和默认继承权限。class 的成员默认是 private,默认继承方式也是 privatestruct 的成员默认是 public,默认继承方式也是 public。除此之外,struct 一样可以有构造函数、析构函数、成员函数、模板、继承、多态,功能上并不比 class 弱。工程里通常用 struct 表示偏数据聚合、语义简单的类型,用 class 表示封装性更强、强调不变量和接口约束的类型,这更多是代码风格和设计意图上的区分。

代码:

#include <iostream>
using namespace std;

struct A {
    int x;           // 默认 public
};

class B {
    int x;           // 默认 private
public:
    B(int v) : x(v) {}
    int get() const { return x; }
};

int main() {
    A a{10};
    B b(20);
    cout << a.x << endl;
    cout << b.get() << endl;
    return 0;
}

2. struct 和 union 的区别是什么

答案:struct 里的每个成员都有各自独立的存储空间,对象大小通常至少能够容纳所有成员。union 里的所有成员共享同一块内存,同一时刻通常只适合认为其中一个成员是“当前有效”的,所以它的大小通常等于最大成员的大小,再考虑对齐。union 的典型用途是节省内存,或者做底层字节解释、协议解析、标签联合体等。但在现代 C++ 里,如果是更安全地表达“多种类型中的一种”,通常更推荐用 std::variant,因为它会显式记录当前持有的是哪种类型。

代码:

#include <iostream>
using namespace std;

union U {
    int i;
    float f;
};

int main() {
    U u;
    u.i = 10;
    cout << u.i << endl;
    u.f = 3.14f;
    cout << u.f << endl;
    return 0;
}

3. C++11 有哪些重要新特性

答案:C++11 是现代 C++ 的分水岭,比较核心的能力包括右值引用和移动语义、完美转发、autodecltype、范围 fornullptrlambda、智能指针、std::threadstd::mutexstd::atomicunordered_mapinitializer_listconstexprstatic_assert 等。如果从工程价值上看,最常用的往往是这几类:一类是让代码更简洁的,比如 auto、范围 for、lambda;一类是提升性能的,比如移动语义、完美转发;一类是改善资源管理和并发编程的,比如智能指针、线程库和原子类型。很多现代 C++ 代码风格,基本都是从 C++11 开始成型的。

4. 右值引用和移动语义解决了什么问题

答案:它解决的核心问题是:临时对象或者即将销毁的对象,没有必要再做一次昂贵的深拷贝。传统 C++ 在对象传值、容器扩容、函数返回时,常常会触发大量复制。引入右值引用后,程序可以区分“还能继续使用的对象”和“可以安全转移资源的对象”,从而把内部指针、缓冲区、句柄等资源直接转移出去。这样做可以显著减少内存分配和数据拷贝,对容器、字符串、大对象传递都很关键。现代标准库的大部分性能提升,都和移动语义密切相关。

代码:

#include <iostream>
#include <vector>
using namespace std;

class Buffer {
public:
    Buffer() { data = new int[100]; }
    ~Buffer() { delete[] data; }

    Buffer(const Buffer&) { 
        cout << "copy\n";
        data = new int[100];
    }

    Buffer(Buffer&& other) noexcept 

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

C++ 常考面试题总结 文章被收录于专栏

本专栏系统梳理C++方向, 大中厂高频高频面试考点 , 内容皆来自真实面试经历,从基础语法、内存管理、STL与设计模式,到操作系统与项目实战,结合真实面试题深度解析,帮助开发者高效查漏补缺,提升技术理解与面试通过率,打造扎实的C++工程能力.

全部评论

相关推荐

评论
点赞
3
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务