05 2012 档案
摘要:1. 我们都知道,#define PRICE 30 是预编译处理器进行预编译的时候执行的,无法在编译器进行编译的过程中看见,因此,当编译出错的时候,通常错误信息是提到30,而不是PRICE,因此程序员很难定位到出错的位置。 解决方法是以const代替#define:const int Price = 30; Price肯定可以被编译器看到,因此不会导致上述错误。 2. 为了将常量的作用域限定于一个类中使用,并且只有一份数据,通常定义一个static成员变量(#define无法做到这点): class A { private: static const...
阅读全文
摘要:C++一直是被看做带类的C,当初C++推出的时候,用带类的C来形容C++再贴切不过,但是随着C++语言的成熟,尤其是VS2010对C++新特性的支持(参考MSDN:http://msdn.microsoft.com/zh-cn/library/dd465215),使得C++越来越具有自己独特的韵魅力!为了了解C++语言,必须认识四个主要的次语言: 1. C。 说到底,C++仍然是以C为基础的,区域(blocks), 语句(statement), 预处理器(preprocessor), 内置数据类型(built-in data type), 数组(array), 指针(pointer).....
阅读全文
摘要:请记住三条内存规则(在没有#pragam pack宏的情况下): 1.数据成员对齐规则:struct, union的数据成员,第一个数据成员放在offset为0的地方,之后的数据成员的存储起始位置都是放在该数据成员大小的整数倍位置。如在32bit的机器上,int的大小为4,因此int存储的位置都是4的整数倍的位置开始存储。 2.结构体作为数据成员的对齐规则:在一个struct中包含另一个struct,内部struct应该以它的最大数据成员大小的整数倍开始存储。如 struct A 中包含 struct B, struct B 中包含数据成员 char, int, double,则 stru..
阅读全文