1、 Static有什么用途?
(1)函数体内static变量的作用范围是该函数体,该变量的内存只被分配一次,因此它的值在下次调用时不变;
(2)模块内的static全局变量同样只能在该模块内的函数访问和调用,不能被模块外的其他函数访问;
(3)在类中的static成员变量属于整个类所有,对类的所有对象只有一份拷贝,这个函数不接受this指针,因为只能范围类的static成员函数。
2、 const
1)不管在函数声明修饰形参、还是修饰类的成员变量,表示该成员变量不能被改变,而且通常需要进行初始化,因为之后不能再改变;
2)对于指针来说,可以修饰指针所指向的变量(在*左边,即指针指向内容为常量),也可以指定指针本身为const(在*右边,指针本身是常量),或者两者同时指定为const(都是常量)。
3、 this指针
1)this指针本质是一个函数参数,只是编译期隐藏起形式的,语法层面上的参数,且this指针只能在成员函数中使用,全局函数、静态函数都不能使用;
2)this在成员函数开始前构造,在成员结束后清楚;
3)This指针不占用对象的空间。
4、 ifndef/define/endif的作用
防止头文件被重复引用和定义;
5、 C和C++的区别
1)C主要面向过程,C++面向对象;
2)C是一种结构化语言,重点在于算法和数据结构。C主要考虑通过一个过程将输入进行各种运算后得到输出,C++主要考虑的是如何构造一个对象模型,契合与之相对应的问题域,这样就可以通过获得对象的状态信息得到输出。
6、 C++函数值传递的方式
值传递、指针传递和引用传递
7、 extern “C”的作用
实现C和C++的混合编程;
因为函数被C++编译后在湖中的名字会变长,与C生成的不一致,造成C++不能直接调用C函数。
8、 struct 和class 的区别
1)struct的成员默认是公有的,而类的程园默认是私有的;
2)C中的struct不能包含成员函数,C++中的class可以包含成员函数。
9、 new和malloc
1)都可用来申请动态内存和释放内存,都是在堆(heap)上进行动态的内存操作。
2)malloc和free是c语言的标准库函数,new/delete是C++的运算符。
3)new会自动调用对象的构造函数,delete 会调用对象的析构函数, 而malloc返回的都是void指针。
10、 heap与stack(堆与栈)的差别
1)heap是堆,stack是栈;
2)stack的空间由操作系统自动分配和释放,存放函数的参数值、 局部变量的值等。heap上的空间一般由程序员分配和释放,并要指明大小;
3)栈空间有限而且是一块连续的内存区域,堆是很大的自由存储区;
4)C中的malloc函数分配的内存空间就是在堆上,C++是new;
5)程序在编译期对变量和函数分配内存都在栈上进行,且程序运行过程中函数调用时的参数传递也在栈上进行。
堆栈溢出原因
数组越界, 没有回收内存, 深层次递归调用
11、 Vector、list和deque的区别
Vector:表示一段连续的内存区域,每个元素被顺序存储在这段内存中,对vector的随机访问效率很高,但对非末尾元素的插入和删除则效率非常低。
list:表示非连续的内存区域并通过一对指向首尾元素的指针双向链接起来,插