C++ 服务器开发面试题整理(1)

1.extern关键字作用
(1)extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他文件中寻找其定义。
(2)当C++和C混用时,C++语言在编译的时候为了解决函数的多态问题,会将函数名和参数联合起来生成一个中间函数名,而C语言则不会,因此会造成链接时无法找到对应函数的情况,此时C函数就需要用extern “C”进行链接指定,表示这是C中的函数。

注:(1)extern在声明其他文件中的数组时,若其他文件中声明为char a[3];,则在extern声明时不能写为char *a;,要写成extern char a[];
(2)在一个文件中定义了变量和函数,在其他文件中要使用它们,可以有两种方式:在头文件中声明它们(头文件中的变量要加extern,否则就是重定义),然后其他文件去包含头文件;在其他文件中直接使用extern声明该函数。

2.static关键字作用
(1)局部static对象表示其生命周期从定义开始,直到程序运行结束为止,例如在函数中计算函数调用次数的计数器,可定义为static的,每次在函数中自增都在上一次函数运行的基础上增加。
(2)全局static对象或函数表示其可见范围局限于该文件。
(3)类的static数据成员表示该数据成员不属于该类对象而属于类本身,所有对象共享该成员,可用类名::数据成员名来访问。
(4)类的static函数成员表示该函数不属于该类对象而属于类本身,可用类名::函数名来访问,在其中只能访问类的静态成员。

3.volatile关键字作用
(1)表示易变变量,指可能被通过程序之外的方式改变的变量,如被其他线程等任何非该程序能控制的因素改变。编译器有时会对程序进行优化,将变量放到寄存器中以提高访问速度,但该变量的内存值可能已被其他因素改变,从而造成寄存器中的值失效,之后更改寄存器值后再写回内存使错误数据被写到内存。volatile可以告诉编译器不要优化该变量,每次需要此变量值时都从内存中访问。
(2)一个变量可以既是const的也是volatile的,因为const表示程序不应更改它,但它可能被其他因素改变。

4.关于const关键字
(1)欲阻止一个变量被改变,可使用const,在定义该const变量时,需先初始化,因为以后没有机会改变它了。
(2)对指针而言,可以指定它指向的数据是const的,也可以指定指针本身是const的。
(3)对于类的成员函数,有时候必须指定其为const类型,表明其是一个常函数,在其中不能修改类的数据成员,但可以修改mutable的数据成员。
(4)函数可声明一个const形参,使传入的实参在函数内不可被改变。
(5)类的const数据成员要么要有类内初始值,要么在初始化列表中被初始化。

5.new与malloc的区别
(1)new分配内存按照数据类型进行分配,malloc分配内存按照大小分配。
(2)释放new需要delete,释放malloc需要free。
(3)new不仅分配一段内存,而且会调用构造函数,但是malloc则不会;并且delete会调用析构函数,而free不会。
(4)new是运算符,malloc是库函数。
(5)new可以在指定位置构造对象,使用定位new即可实现。
(6)new返回类型为对应类型的指针,而malloc返回类型为void *。
(7)在空间分配失败时,new会抛出bad_alloc异常,而malloc会返回空指针。为兼容C,new也可以通过传入noexcept来使其在空间分配失败时返回空指针。
(8)C++允许重载new和delete。
(9)new在分配数组时要使用new T[],销毁数组时使用delete[]。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值