欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C/C++面试常考关键字

程序员文章站 2022-04-15 19:44:38
c/c++面试常考关键字总结 1.static关键字的作用? 1)、static 申明的变量为静态全局变量,该变量存储在静态数据区,当整个程序结束时该变量才会被释放,只是生命周期延长,作用域不受影响...

c/c++面试常考关键字总结

1.static关键字的作用?
1)、static 申明的变量为静态全局变量,该变量存储在静态数据区,当整个程序结束时该变量才会被释放,只是生命周期延长,作用域不受影响。
2)、static申明的变量定义时如果不初始化默认初始化为0
3)、被static修饰的变量只能作用于本文件内,即使被extern修饰也不行

2.const,define的区别
1)、const修饰的变量为只读变量,定义一个const类型的变量时必须完成初始化
2)、define意为宏定义一个常量,给某个命名变量宏定义一个确定的数值,在预编译期间将会完成一个替换的动作,用宏定义的值替换给变量名。
3)、const也可以修饰函数的参数列表以及函数的返回值,参数返回值被const修饰代表参数和返回值均不能被改变。
4)、const修饰的变量可以通过强制类型转换转为非const
5)、const修饰的成员变量只能在构造函数的初始化列表进行初始化。并且不能修改
6)、const修饰成员函数,该成员函数不能修改任何成员变量的值
7)、const修饰对象:该对象中所有的成员都变成只读,而且该对象的所以成员函数都必须被const修饰。

3.new/delete ,malloc/free的区别
(1)new/delete malloc/free都是用来动态申请内存空间的 ,两组必须成对使用。
(2)new/delete为运算符,malloc/free为库函数需要头文件
(3)new/delete为对象申请释放内存会调用相应的构造函数和析构函数 malloc/free则不会
(4)new有数据类型的检查,是类型安全的,malloc无数据类型的检查返回值为void*
(5)new申请内存空间必须指明要存放的数据类型和要存放对象的数目,malloc只需要指明申请空间的大小,可以通过显示地强制类型转换改变返回值的数据类型

4.auto(c++)
auto申明的变量必须初始化,程序会根据初始化的值的数据类型来自动确定该变量的数据类型。

5.指针和引用的区别
(1)指针和引用都是通过地址索引数据的。
(2)指针存放的是变量的地址,引用是变量的别名。
(3)指针也是一个变量需要占用4个字节(32位机器)的内存空间,引用不需要占用内存,它只是变量的一个别名。

5.面向对象和面向过程

面向对象:面向主要是以目标对象为研究体,这一思想的实现需要对各种不同属性的类进行封装,进而分析每种类型事物的属性和功能方法,
这种思想将计算机软件与外界系统一一对应,进行有针对性的研究。核心在于 (对象 + 消息)

面向过程:c语言是面向过程的语言,这种思想主要是为了去实现某种功能或目标去一步步研究算法流程,步步求精,
进而用一种最为简捷的过程来实现最终的目标,核心为 (算法+数据)

6. static修饰类的成员变量和成员函数
(1)static修饰的成员变量属于这个类,不属于某个对象。
(2)static修饰的成员变量需要在类外进行初始化。
(3)static修饰的成员函数只能访问static修饰的成员变量,不能访问普通成员变量。
(4)static修饰的成员函数没有this指针。
(5)基类static修饰的成员变量继承给子类也只存在一份,基类和派生类共享该成员。
(6)类内部可以定义静态的类对象成员,即 可以定义static修饰的类对象
// public:static base a; (正确) public: base a; (错误)

7.mutable关键字
被mutable修饰的成员变量,是可变的,可以修改的,即使某个对象是const类型,该成员变量也可以被修改。在被const修饰的成员函数中该变量也可以被修改。

8.explicit:
只能修饰构造函数,防止单参数的构造函数隐式类型转换,把一个常量转换成一个对象。
在没有加explicit之前,可以把一个常量赋给一个对象。
推荐构造函数前最好加explict

9.volitile:
该关键字意思为易变的,因为有些时候某个变量容易被改变,所以我们需要读取当前该变量最新的数据,不需要编译器做优化处理。
主要用于多线程中。volatile提醒编译器它后面所定义的变量随时都有可能改变,因此编译后的程序每次需要存储或读取这个变量的时候,都会直接从变量地址中读取数据。如果没有volatile关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现读取数据不一致的现象。