涨知识 --- VI

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;
}
原文地址:https://www.cnblogs.com/luntai/p/5778587.html