20210531-C++面试
Posted 茴薏
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了20210531-C++面试相关的知识,希望对你有一定的参考价值。
1. sizeof(void)=1;
windows:sizeof(void)编译不通过
C++:sizeof(空的结构体/类)=1
C:sizeof(空的结构体)=0
2.右值引用就是将寄存器中的值进行引用
如: int&& i = a+1;
int& i = a+1编译时通不过的,因为a+1是寄存器中的值,无法作为左值,如果要用,就要先把寄存器中的值保存到内存中
如:int c = a+1;
iint& i = c;
右值引用为了效率考虑,少了寄存器的值到内存的拷贝。使用move可以将左值变为右值。
使用场景:函数返回一个临时变量,想减少一次复制时(数据很大),可以使用右值引用。
3.移动构造:
减少不必要的复制,带来性能提升。就是将临时对象它原来的内存空间转移给构造出来的对象,而不是进行复制。
使用场景:临时对象即将消亡,但是它里面的资源需要再利用。移动构造函数(使用右值引用)。
4.虚函数是怎么实现的?
虚函数主要是实现多态的功能。它是通过虚函数表和虚表指针的方式来实现的。编译器在编译时,会给所有虚函数的类创建一张虚函数表。构建派生类的流程:
1)将实例化的虚表指针先指向基类的虚函数表。
2)构造基类的成员变量。
3)调用基类的构造函数
4)将实例化的虚表指针指向派生类的虚函数表
以上是关于20210531-C++面试的主要内容,如果未能解决你的问题,请参考以下文章