C++面试必备知识点:const、static与内存管理

需积分: 0 4 下载量 172 浏览量 更新于2024-08-03 收藏 3.86MB PDF 举报
"C++面试知识点的详细梳理" 在C++面试中,了解并掌握一系列核心概念至关重要。这里我们深入探讨这些知识点: 1. **const**:const关键字在C++中有着多方面的作用。它可以用来修饰变量,使之变为不可变;也可以修饰指针,创建指向常量的指针或指针常量;此外,常量引用是const的一个常见应用,它既能防止值的拷贝,又能避免函数内部对值的修改。const成员函数则保证不会修改对象的状态,常用于读取数据的场景。 2. **static**:在类中,static关键字可以用来创建类级别的变量和函数,即静态成员变量和静态成员函数。静态成员不依赖于类的实例,而是所有实例共享的。在全局或局部作用域中,static也用来声明静态变量,这些变量在程序的整个生命周期中只初始化一次。 3. **this指针**:在每个非静态成员函数中,this是一个隐含的指针,它指向调用该函数的对象。this可以用来访问对象的成员变量和调用其他成员函数。 4. **inline内联函数**:内联函数是一种优化技术,通过将函数体插入到每个调用点来消除函数调用的开销。编译器在处理inline函数时会尝试展开函数,但并不总是保证成功。内联函数有其优点,如节省调用时间,但也可能导致代码膨胀。 5. **虚函数(virtual)与内联函数**:虚函数用于实现多态性,而内联函数用于优化。虽然理论上虚函数可以是内联的,但实际中编译器可能因为虚函数的动态绑定特性而拒绝内联。 6. **assert()**:这是一个调试工具,用于在运行时检查程序状态。如果assert表达式的值为假,程序将停止执行并打印错误信息。 7. **sizeof()**:这个操作符返回类型或表达式的大小(以字节为单位)。 8. **#pragma pack(n)**:这用于调整结构体的对齐方式,可以减少内存占用,但可能会降低性能。 9. **位域**:位域允许在结构体中按位存储数据,节省内存空间。 10. **volatile**:volatile用于指示变量的值可能在编译器无法预测的情况下发生变化,如硬件中断或并发编程中。 11. **extern"C"**:在C++中,extern"C"用于在C++代码中声明C风格的函数,以保持与C语言的兼容性。 12. **struct与typedef struct**:在C++中,struct和class的主要区别在于默认访问权限(public vs private),但它们都可以定义类类型。typedef可以用来给已有的类型创建别名。 13. **union**:联合体是一种特殊的数据类型,其中所有成员共享同一块内存空间。 14. **explicit关键字**:explicit用于阻止隐式类型转换,防止意外的构造函数调用。 15. **friend**:友元机制允许一个类访问另一个类的私有和保护成员。 16. **using声明与指示**:using声明用于引入命名空间中的特定标识符,而using指示则引入整个命名空间。 17. **enum枚举类型**:枚举类型提供了一种安全的方式来定义整型常量,分为限定作用域和不限定作用域的枚举类型。 18. **decltype**:这个关键字根据表达式的类型返回类型。 19. **引用来及引用折叠**:左值引用和右值引用是C++11引入的概念,用于实现Rvalue引用和完美转发。引用折叠则是关于多层引用的规则,确保类型推导的一致性。 20. **宏**:宏是预处理器的一种特性,用于文本替换,但存在一些潜在问题,如名称冲突和副作用。 21. **成员初始化列表**:构造函数初始化列表用于在对象构造时直接初始化成员变量,可以提高效率并避免默认构造函数的额外调用。 22. **initializer_list列表初始化**:C++11引入的特性,允许用花括号初始化集合对象。 23. **面向对象特性**:包括封装、继承和多态。封装是隐藏实现细节,继承是创建新类基于已有类,多态分为静态多态(如函数重载)和动态多态(通过虚函数实现)。 24. **内存管理**:涉及malloc、calloc、realloc、alloca等动态内存分配函数,以及new、delete操作。定位new用于在指定地址创建对象,`delete this`在某些情况下是合法的,但需谨慎使用。智能指针如std::unique_ptr和std::shared_ptr提供了自动内存管理。 25. **C++标准库(STL)**:包括容器(如vector、list、set)、迭代器、算法和内存管理工具。 这些是C++面试中常见的知识点,理解并熟练运用它们对于成为一名优秀的C++开发者至关重要。在准备面试时,确保对这些概念有深入的理解,并能够解决相关的实践问题。