记录一次c++的面试

1.什么是深拷贝、浅拷贝,它们有什么不同
深拷贝和浅拷贝是编程中复制对象的两种方式。
- 深拷贝:深拷贝会创建一个新的对象,并且递归地复制原对象中的所有字段,包括基本数据类型和引用类型的字段。对于引用类型的字段,深拷贝会创建该引用类型指向的实际对象的副本,因此修改新对象中的任何引用类型字段都不会影响原对象。深拷贝能够完全隔离原对象和新对象,确保两者互不影响。
- 浅拷贝:浅拷贝则只复制对象的引用,而不是对象本身。它创建新对象,并复制原对象的非引用类型字段的内容,但对于引用类型的字段,浅拷贝不会创建新的对象,而是简单地复制引用,即新老对象仍然共享同一块内存空间的引用类型数据。因此,如果通过浅拷贝得到的对象修改了引用类型的字段,那么原对象对应的字段也会被改变。
-
2.在C++中,extern关键字的作用?
在C++中,extern关键字的作用主要是用于声明全局变量和函数的引用
首先,extern关键字用于声明一个全局变量或函数的定义位于其他文件中。这样,当一个文件中需要使用另一个文件中定义的全局变量或函数时,可以通过extern关键字来实现引用,而不需要重新定义它们。
其次,使用extern关键字可以避免多重定义错误。当多个文件需要共享同一个全局变量或函数时,只需在一个文件中定义该变量或函数,然后在其他文件中使用extern关键字声明,这样可以确保该变量或函数只在一个地方定义,避免了多重定义的问题。
再者,extern关键字还有助于提高编译效率。当只需要引用某个函数或变量时,不需要包含其完整的头文件,只需在源文件中使用extern声明即可,这样可以减少编译时间。
此外,extern关键字还可以用来控制全局变量或函数的作用范围(可见性)。编译器在遇到extern声明时,会知道该变量或函数可以在本模块或其他模块中使用。
总的来说,extern关键字是C++中一个重要的工具,它允许程序员在不同的文件之间共享数据和功能,同时保持代码的模块化和可维护性。

3.结构体和联合体的大小?
结构体的大小是由其成员的大小和内存对齐规则决定的,而联合体的大小等于其最大成员的大小
1. 结构体大小
-结构体中每个成员都有自己的偏移量,通常与该成员的类型有关。
-结构体的总大小需要满足最大数据类型所占字节的倍数,并且要求整体占用的内存是最小的。如果结构体的最后一个成员之后还有剩余空间,那么这部分空间通常会被编译器保留作为填充,以保证结构体大小的边界对齐要求。
2. 联合体大小
-一个联合体的大小等于其内部最长成员的大小。这是因为联合体的所有成员共享同一块内存空间,所以它的总大小仅由最大的那个成员决定。
在具体的编程实践中,结构体和联合体的大小会受到编译器的具体实现以及目标平台的影响。例如,不同的编译器可能有不同的内存对齐策略,这可能会影响结构体最终的大小。因此,了解特定平台上的结构体和联合体的行为对于高效的内存使用和程序设计是非常重要的。

4.static与const?
static和const是C++中两个有着不同用途的关键字。具体区别分析如下:

  • static关键字:主要用于控制变量的存储方式和可见性。当用于局部变量时,它使得该变量的生命周期延长至整个程序运行期间,而不是仅限于函数调用期间。这意味着静态局部变量在函数调用之间保持其值。此外,static还可以用来限制变量或函数的作用域仅在当前源文件内,这有助于防止名称冲突并提高代码的模块化。
  • const关键字:用于声明一个常量,即阻止变量的值被改变。它可以用于修饰变量、指针、函数参数等,确保这些值在声明后不能被修改。const还可以用来定义常量指针和指针常量,以及确保函数不会修改其输入参数的值。在类的成员函数中,const可以用来修饰那些不修改类成员变量的函数,这样的函数只能调用其他const函数,以确保类的实例状态不被改变。

5.堆和栈(内存管理)
1. 内存分配:栈的内存分配是自动的,由系统在函数调用时为局部变量等自动分配和释放。而堆的内存需要程序员手动申请和释放,例如在C语言中使用malloc函数来分配内存。
2. 管理方式:栈的管理是自动的,系统会在函数调用结束后自动清理栈上的内存。相比之下,堆的内存管理需要程序员介入,如果忘记释放可能会导致内存泄漏。
3. 使用场景:一般来说,对于小且临时使用的数据,适合放在栈上;而对于大块的或者生命周期较长的数据,则更适合放在堆上。

具体是什么公司我就不透露了,基础的面试基本就是八股文上的,每一轮必有,面试官重点还是看项目,问的比较深,会往底层原理靠。和面试官聊了很多,他也给了很中肯的建议,语言只是工具,个人发展还是得往深处学,不要仅仅停留在会用…
我也理不清现在自己的心态了,生活还要继续啊,记录一下,共勉吧!

  • 21
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值