1.空类所占空间大小
空类所占空间为1,单一继承的空类空间也为1,多继承的空类空间还是1.但是虚继承涉及虚表(虚指针),所以sizeof(C)的大小为4。
2.内联函数与宏定义
Ans:内联函数和普通函数相比可以加快程序运行速度,因为不需要中断调用,在编译的时候内联函数可以直接镶嵌到目标代码中。而宏只是一个简单的替换。
所谓的嵌入代码,是指在调用函数的地方把所需要的函数代码直接写到那里去。对于短小的代码来说,inline可以带来一定的效率提升,而且和C时代的宏函数相比,inline更加安全可靠。可是是以增加空间为代价的。
比如,在C中,可以定义无返回值类型的函数。
#include <stdio.h> inline func(int i) { return i * i; } int main() { printf("%d ", func(8)); return 0; }
3.交换问题:
//交换无效:没有修改指针中的内容。 void swap3(int *p, int *q){ int *tmp; tmp = p; p = q; q = tmp; } //交换成功!a & b所在地址处的内容发生交换 void swap4(int *p, int *q){ int tmp; tmp = *p; *p = *q; *q = tmp; } //交换成功!同上 void swap5(int &p, int &q){ int tmp; tmp = p; p = q; q = tmp; } int main() { int iv; int iv2 = 1024; int iv3 = 999; //int &reiv; int &reiv2 = iv; int &reiv3 = iv; int *pi; //*pi = 5;整数指针pi没有指向实际的地址。在这种情况下就给他赋值是错误的,因为赋的值知不知道该放到哪里。 pi = &iv3; //const double di; 错误!常量赋值必须进行初始化 const double maxWage = 10.0; const double minWage = 0.5; const double *pc = &maxWage; int a=1,b = 2; swap3(&a,&b); cout<<a<<" , "<<b<<endl; swap4(&a,&b); cout<<a<<" , "<<b<<endl; swap5(a,b); cout<<a<<" , "<<b<<endl; return 0; }