C++ 基础2
STL中有哪些容器
顺序性容器(vector deque list),关联容器(map、set)、容器适配器(queue,stack)
C++中delete和delete[]的区别
使用new来分配单个对象的内存,就使用delete来释放;使用new[]来分配数组对象的内存,就使用delete[]来释放,释放内存之后,同时也要将指针设置为NULL,避免出现野指针。
STL由哪六部分构成
容器、算法、迭代器、函数对象、适配器、内存分配器
面相对象的三大特性
封装、继承、多态
基类析构为什么要设置为虚函数
当一个对象通过基类指针或引用进行删除时,如果基类的析构函数不是虚函数,可能导致派生类对象的析构函数不会被调用,从而引起资源泄漏或行为未定义的情况。
lambda表达式的理解,它可以捕获哪些类型
Lambda表达式是C++11引入的一个很重要的特性,它是一个可调用对象,定义了一个匿名函数,并且可以捕获一定范围内的变量。
lambda表达式通过这个捕获列表来捕获一定范围内的变量:
(1)[ ]:不捕获任何变量
(2)[&]:按引用捕获
(3)[=]:按值捕获
C语言中const与C++中const的区别
C语言中的const:
1.const修饰的变量是只读的,本质还是变量
2.const 修饰的局部变量在栈上分配空间
3.const修饰的全局变量在只读存储区分配空间
4.const只在编译期有用,在运行期无用
5.C语言中的const使得变量具有只读属性
6.const将具有全局生命周期的变量存储于只读存储区
7.const修饰的变量不是真的常量,它只是告诉编译器该变量不能出现在赋值符号的左边。
C++在C的基础上对const进行了进化处理
1.const声明变量时在符号表中放入常量
2.编译过程中若发现使用常量则直接以符号表中的值替换
3.编译过程中若发现下述情况则给对应的常量分配存储空间
(1)对const常量使用了extern
(2)对const常量使用&操作符
4.C++编译器虽然可能为const常量分配空间,但不会使用其存储空间中的值。