C++常见面试简答题 || 指针和引用 / 静态绑定动态绑定 / 多态 / STL常见容器 / 智能指针 / C++11新标准

版权声明:转用请注明出处 https://blog.csdn.net/weixin_39411321/article/details/89601256

1、引用和指针的区别

A:定义一个引用变量和定义一个指针变量的汇编指令一模一样,区别是引用变量必须要初始化,指针没有强制要求。
B:通过应用变量修改内存的值和通过指针修改指向内存的值,汇编指令一样,区别是应用更加安全,而指针有可能解引用一个空指针或野指针。
C:指针有一级和多级,而引用只有一级的引用

2、解释静态绑定和动态绑定

静态绑定:指的是函数调用,在编译期间就已经是明确的函数调用。
动态绑定:指的是通过指针或者引用,调用同名覆盖方法,运行时从指定的对象头部取vfptr,间接访问vftable,在vftable中取虚函数的地址,进行函数调用,用指针或者引用调用virtual函数一定会发生动态绑定

3、解释什么是多态

动态的多态:在继承结构中,用积累的指针或引用,指向从该基类继承的派生类对象,调用派生类和基类的同名覆盖方法基类指针指向哪个派生类方法,就调用哪个派生类的方法,这就叫动态的多态,其本质就是动态绑定
静态的多态:

4、请列举你所熟悉的容器并做简要功能描述

Vector:数组容器
Deque:双端队列容器
List:链表容器
Stack:容器适配器 底层依赖deque实现,提供了常用的栈结构的操作
Queue:容器适配器 底层依赖deque实现,提供了单向队列的操作
Priority queue:容器适配器 底层依赖vector实现,提供了一个默认的大根堆结构操作
Set/map:有序关联容器;底层实现是红黑树
Unordered_set/unordered_map:无序关联容器,底层实现是哈希表

5、请列举你所熟悉的智能指针并做简要功能描述

A :auto_ptr:只有最新的auto_ptr指向资源,原来的成为nullptr,使用起来很危险
B :scoped_ptr: 把左值引用的拷贝构造和operator=给delete掉了,不能使用
C :unique_ptr: 把左值引用的拷贝构造和operator=给delete掉了,但是提供了右值引用参数的拷贝构造和operator=函数,支持临时对象拷贝构造或者赋值unique_ptr对象,使用非常安全。

6、请列举你知道的C++11新标准的语法,并做简要功能描述

A: Auto定义变量,可以根据右边的类型,推导左值的类型信息,使用非常方便。
B: Foreach语句,其底层就是通过迭代器来遍历访问容器元素的。
C:Nullptr和NULL的区别是,nullptr是一个指针类型,用来给指针变量做初始化用,而NULL只是一个宏定义,代表整数0,可能会和整数混用。
D:右值引用,大大提供了大对象(临时对象)的拷贝构造和赋值重载的效率问题。
E:Lambda表达式,其底层是函数对象的一个具体实现,但是比函数对象更加灵活,主要使用在泛型算法当中,可以改变算法的运算结果。
F:Thread多线程类库,可以提供语言级别的多线程编程,好处是多线程代码可以跨平台运行。
G:提供了处理更多参数的绑定器和函数对象。

猜你喜欢

转载自blog.csdn.net/weixin_39411321/article/details/89601256