C++ 开发面试题必知必会-V1版.pdf 本文档为 C++ 开发面试题必知必会-V1版.pdf 的知识点总结,涵盖了 C++ 基础、集合、面向对象、内存管理等方面的知识点,同时也涉及到 Redis、计算机网络、操作系统、MySQL 等基础知识。 一、C++ 基础 1. C 和 C++ 的区别: C++ 是面向对象的语音,而 C 是面向过程的语音;C++ 引入 new/delete 运算符,取代了 C 中的 malloc/free 库函数;C++ 引入引用概念,而 C 中没有;C++ 引入类的概念,而 C 中没有;C++ 引入函数重载的特性,而 C 中没有。 2. a 和 &a 的区别: a 是数组名,是数组首元素的地址,+1 表示地址值加上一个 int 类型的大小,如果 a 的值是 0x00000001,加 1 操作后变为 0x00000005。*(a + 1) = a[1]。&a 是数组的指针,其类型为 int (*)[10](就是前面提到的数组指针),其加 1 时,系统会认为是数组首地址加上整个数组的偏移(10 个 int 型变量的大小),值为数组 a 尾元素后一个元素的地址。 3. static 关键字的作用: 修饰局部变量时,使得该变量在静态存储区分配内存;只能在首次函数调用中进行首次初始化,之后的函数调用不再进行初始化;其生命周期与程序相同,但其作用域为局部作用域,并不能一直被访问;修饰全局变量时,使得该变量在静态存储区分配内存;在声明该变量的整个文件中都是可见的,而在文件外是不可以的;修饰函数时,在声明该函数的整个文件中都是可见的,而在文件外是不可以的,从而可以在多人协作时避免同名的函数冲突;修饰成员变量时,所有的对象都只维持一份拷贝,可以实现不同对象间的数据共享;不需要实例化对象即可访问;不能在类内部初始化,一般在类外部初始化,并且初始化时不加 static ;修饰成员函数时,该函数不接受 this 指针,只能访问类的静态成员;不需要实例化对象即可访问。 四、#define 和 const 的区别: #define 宏是在预处理阶段展开,不可以对宏定义进行调试,而 const 常量是在编译阶段使用;类型和安全检查不同:#define 宏没有类型,不做任何类型检查,仅仅是代码展开,可能产生边际效应等错误,而 const 常量有具体类型,在编译阶段会执行类型检查;存储方式不同:#define 宏仅仅是代码展开,在多个地方进行字符串替换,不会分配内存,存储于程序的代码段中,而 const 常量会分配内存,但只维持一份拷贝,存储于程序的数据段中。定义域不同:#define 宏不受定义域限制,而 const 常量只在定义域内有效。 五、频繁使用的短小函数应该使用什么来实现: 应该使用 inline 内联函数,即编译器将 inline 内联函数内的代码替换到函数被调用的地方。优点:在内联函数被调用的地方进行代码展开,省去了函数调用的时间,从而提高程序运行效率;相比于宏函数,内联函数在代码展开时,编译器会执行语法安全检查或数据类型转换,使得使用更加安全;缺点:代码膨胀,产生更多的开销;如果内联函数内代码块的执行时间比调用的时间长,那么效率的提升并不那么大;如果修改内联函数,那么所有调用该函数的代码文件都需要重新编译;内联声明只是建议,是否内联由编译器决定,所以实际并不可控。 六、智能指针的原理和分类: 智能指针是 RAII 类模型,用于动态分配内存,其设计思想是:在栈上分配内存,自动释放内存,避免内存泄露。智能指针有两种:unique_ptr 和 shared_ptr。unique_ptr 是独占所有权的指针,一个对象只能被一个 unique_ptr 所拥有;shared_ptr 是共享所有权的指针,多个 shared_ptr 可以共享同一个对象的所有权。
剩余110页未读,继续阅读
- 粉丝: 0
- 资源: 9
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助