[C++知识点]2015.4.18

1.“static_cast/强制转换”后普通函数、虚函数的表现

A基类

B子类

实例aPtr:将B实例强制抓换得到的A实例

实例bPtr:将A实例强制转换得到的B实例

clipboard

总结:

(1)

aPtr因为是从B实例强制转换过来的,所以虚函数始终调用B的虚函数实现

bPtr因为是从A实例强制转换过来的,所以虚函数始终调用A的虚函数实现

(2)

static_cast和强制转换则根据转换后的结果来进行调用

2.sizeof内存对齐

   步骤一:结构体内每个变量,有效对齐值=“min(当前位置的变量类型的长度, n)”获得初步的size为num)

   步骤二:num根据“min(所有变量类型的最长长度, n)”补充对齐(到能被该值整除的地步)

范例:

#pragma pack(push, 4)

struct A{

    int a;

    short b;

    char c1;

    char c2[7];

    int d;

    char e;

}

步骤一:

内存分配如下:

a:  0 1 2 3 

b:  4 5 

c1: 6 

c2: 7 8 9 10 11 12 13

d:  16 17 18 19

e:   20

num=4+2+8+空白2+4+1=21

步骤二:

num需要填充到24才能被max(4, 4)整除,所以sizeof(A) = 24

clipboard[1]

32位和64位其他区别见:

http://www.cnblogs.com/sara-gcj/p/3324187.html

32位    64位

clipboard[2]

clipboard[3]clipboard[4]

posted @ 2015-04-18 19:47  何解一直犯相同错误?  阅读(152)  评论(0编辑  收藏  举报