C++3
76、为什么C语言不支持重载而C++支持重载
1 这个问题就好比为什么会有externC这种东西C++不是兼容C 的吗 2 原因是C++编译器在编译的时候对于不同类型的函数会编译成不同类型的函数名,比如说 int fun(int a, int b) 可能就会被编译成_int_fun_int_int这样子,而C语言的编译器不会,所以如果不写externC C++编译器会报错,因为它无法找到对应的函数。这也是C++为什么支持重载的原因
77、判断是否是重载
int *fun(int *)
double *fun(double *)
以上两个是正确的 返回值都是指针
78、
1 #include <iostream> 2 using namespace std; 3 4 class A { 5 virtual int fun() {} 6 }; 7 class B { 8 virtual int fu() {} 9 }; 10 class D { 11 virtual int fu() {} 12 }; 13 14 class C :public A, public B,public D { 15 }; 16 17 int main() { 18 cout << sizeof(A) << endl;//4 19 cout << sizeof(C) << endl;//12 20 }
79、vector 迭代器删除要 vec.earse(it --); 因为vector删除元素之后会自动前移
80、volatile的作用:
1 C语言中 2 volatile 表示一个变量时随时可能变化的,编译器需要每次从该变量的地址去值 3 volatile 有关的操作不需要编译器进行优化了,以避免发生错误,因为优化的话如果编译器发现两次操作都没有对某个变量的值进行改变那么他会自动取得上一次的值,只对于寄存器变量以及端口数据很容易出错。
81、swap
1 void swap(int *p, int *q) { 2 int *tmp; 3 *tmp = *p; 4 *p = *q; 5 *q = *tmp; 6 } 7 //这样处理是非常危险的 因为 tmp是个野指针 我对于野指针赋值是很危险的 8 9 正解 10 void swap(int *p, int *q) { 11 int tmp; 12 tmp = *p; 13 *p = *q; 14 *q = tmp; 15 }