工程师每日刷题-7

(1)final和override的作用?final为什么能提高代码执行效率?

override:保证在派生类中声明的重载函数,与基类的虚函数有相同的签名,作用就是用于编译期代码检查。
final:阻止类的进一步派生和虚函数的进一步重写,同时也是一种名为去虚拟化的优化技巧,相当于把运行期多态转换为了编译期多态,提高了执行效率。

(2)static的3种作用?

修饰局部变量,这意味着该变量只被初始化一次,并保留其值直到程序结束。
修饰全局变量,这意味着该变量具有文件作用域。
修饰成员变量,这意味着变量不会绑定到对象上。

(3)thread_local作用和原理?

thread_local用来定义一个线程本地变量,每个线程都拥有自己的thread_local对象副本,这些副本放在各个线程自己的TLS空间。thread_local描述的对象在thread开始时分配,而在thread结束时释放。

(4)一个变量可以既是const又是volatile吗?

可以。const的作用是告诉编译器,编译期间不允许对变量进行修改,编译器在编译期间往往会对const变量执行一种名为字符替换的优化。volatile的作用是告诉编译器,第一,编译期间不要对该变量进行优化;第二,运行期间,每次必须从内存中加载变量的值。const volatile表示一个变量在程序编译期不能被修改且不能被优化;在程序运行期,每次必须从内存中加载变量的值。

(5)NULL和nullptr区别?为什么要引入nullptr?

主流编译器中,NULL 实际上是一个整数常量,被定义为 0,在 C++11 之前,当我们想要将一个指针初始化为空时,我们通常使用 NULL;nullptr 是 C++11 中引入的新的关键字,专门用于表示空指针,它不是整数类型,而是特殊的指针类型nullptr_t。之所以引入nullptr,第一,NULL是整数类型,用户调用foo(NULL)的时候,不能区分调用的是foo(int)还是foo(int*)函数;第二,主流编译器中NULL值为0,通过0表示一个无效地址,但是有的架构下,0地址有特定用途,而nullptr指向的永远是一个无效地址。

你可能感兴趣的:(工程师每日刷题,c++)