C/C++面试题吐槽与解析(一)

1.C++中const有什么作用?

(1)const用于定义常量:const定义的常量编译器可以进行数据静态类型安全检查。【个人感觉c++还是别用define的好】

(2)const修饰函数形参:当输入用户自定义类型和抽象数据类型时,应该将“值传递”改为“const&”传递,以提高效率。

(3)const修饰函数返回值:返回值不能被直接修改,且只能赋值给加const修饰的同类型指针。

(4)const修饰类的成员函数:任何不会修改数据成员的函数都应用const修饰。

2.static有什么作用?

(1)在函数体,一个被声明为静态的变量在这一函数调用过程中维持其值不变。

(2)在模块内(不在函数体内),一个静态变量可以被模块内所有函数访问,但不能被模块外其他函数访问。它是个本地的全局变量。

(3)一个被声明为静态的函数只可被这一模块内的其他函数调用。

3.有了malloc/free,为什么还要new/delete

对于非内部数据类型的对象而言,光是malloc/free无法满足动态对象的要求。对象需要执行构造、析构函数,由于malloc是库函数不是运算符,不在编译器控制权限之内,不能将执行构造、析构函数的任务强加于malloc和free。【都用new、delete没毛病,历史包袱而已】

4.有哪几种情况只能用initialization list,而不能用assignment?

当勒种含有const、reference成员变量和基类的构造函数时都需要初始化列表。

5.对于一个C++中的空类默认会产生那些类成员函数?

  • 默认构造函数和复制构造函数。
  • 析构函数。
  • 赋值函数。
  • 取值运算。
class Empty{
public:
Empty();
Empty(const Empty&)
~Empty();
Empty& operator=(const Empty&);
Empty* operator&;
}

6.构造函数explict与普通构造函数的区别

普通构造函数能够被隐式调用,而explicit构造函数能被显示调用。

7.C++中虚析构函数的作用是什么?

只有当一个类被当做基类时,才会把析构函数写作虚函数。子类 会先执行子类的析构函数,再执行 基类的虚析构函数,保证资源正常释放。

8.复制构造函数是什么?什么是深拷贝和浅拷贝?

复制构造函数是一种特殊的构造函数,它由编译器调用来完成一些基于同一类的其他对象的构造和初始化。

以下三种情况对象会调用复制构造函数:

(1)一个对象以致传递的方式传入结构体。

(2)一个对象以值传递方式从函数返回。

(3)一个对象需要通过另外一个对象进行初始化。

浅复制是指让新旧两个对象指向同一个外部的内容,而深复制是指为新对象制作外部对象的独立复制。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值