现在的位置: 首页 > 综合 > 正文

VC笔记3

2013年02月20日 ⁄ 综合 ⁄ 共 1405字 ⁄ 字号 评论关闭

1.字节对齐:

   1.各数据类型自身对齐值就是它的类型所占内存大小

   2.用#pragma pack(value)制定对齐值value(32位机默认是4)

  3.一个结构(数组,类,结构体,联合体等)中的成员的实际对齐值是成员自身对齐值和指定对齐值中较小的一个

  4.一个结构(数组,类,结构体,联合体等)的对齐值是max(各个成员的实际对齐值)

  5.一个数据的对齐值是a,则它要在a的最小倍数处开始存放。

   如:(取默认对齐值4)

   struct B

   {

     char b;

     int a;

     short c;

   }

   a的对齐值:min(4,1):1

   b的对齐值:min(4,4):4(需要在a后补3个字节,才能使b从4的最小倍数开始)

   c的对齐值:min(2,4):2(不要补)

   结构体的对齐值:max(1,4,2):4

   总大小:1+3+4+2 = 10

   因为(10+2)%4=0(结构体起始位置处要偏移2个字节)

   所以总大小是12

   21.计算机中的数据是以补码的形式存放的,正数的原码和补码一样,-5的补码:

   5的补码:0000 0101

   取反:1111 1010

   末尾加1:1111 1011即是-5的补码

   22.除法很慢,需要翻译成多条机器码,尽量避免

 

23.把数字转成字符串和把含数字的字符串转成数字都要经过很多机器码,一定要慎用

   如:

   printf("%d",i);

   cout << i;等

   24.指向父类对象的指针可以强转成指向子类对象的指针,然后调用子类的方法,对象不可以强转。

   CParent *parent = new CParent

   CSon *son = (CSon*)parent

   son->FunofSun()

   但是此时并没有构造一个子类的对象,如果CSon里有一个成员变量,在构造函数里初始化,son->FunofSun

中如果访问这个成员变量,得到的只是系统分配类

   空间的未初始化的随机变量值,得不到构造函数赋给的值,因为此时构造函数根本没有调用,C++中方法的调

用其实和C一样

   son->FunofSun()编译后的代码其实是一个全局函数:

   CSon::FunofSun(son)

   每个方法都隐含了一个this指针

   25.赋值兼容的时候,子类的指针或引用赋给父类后,只能调用父类中有的方法,调不到子类中有的而父类中没

有的方法,即使是虚函数,父类是有这样的函数的。

 

26.编程规范:

   1.,和;后加空格。

   int a[] = {1, 2, 3}

   2.if while switch for和括号间加空格,括号和表达式之间不加:

      if  ((a == b) && (c == dd))

   3.能用基本类型就不要用对象,因为对象要构造和析构

   27.sizeof后面一般跟类型,如果跟数组名,得到得是数组的实际长度,strlen得到'/0'前的字符数

 

28.内联函数:

   1.内联函数不是在调用时发生控制转移,而是在编译时将函数体嵌入到调用语句处,所以减少了堆栈的切换,

提升了效率   

2.内联函数一般不能含有循环和switch,不能申明异常接口,内联函数如果太复杂,会造成代码膨胀,增大开

销(栈中临时变量存放过久),编译器会自动将其转为普通函数

   3.为减少编译时间,对方法的内联放到代码开发的较后阶段

   29.Afx函数是MFC全局函数,::引用win32的API函数

 

抱歉!评论已关闭.