c/c++面试常考关键字总结
1.static关键字的作用?
1)、static 申明的变量为静态全局变量,该变量存储在静态数据区,当整个程序结束时该变量才会被释放,只是生命周期延长,作用域不受影响。
2)、static申明的变量定义时如果不初始化默认初始化为0
3)、被static修饰的变量只能作用于c/c++开发分享C/C++面试常考关键字件内,即使被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关键字,则编译器可能优化读取和存储,可能暂时使用寄存器中的值,如果这个变量由别的程序更新了的话,将出现读取数据不一致的现象。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/607264.html