1.指针和引用的区别
任何时候都不能有指向空值的引用
注意:
char* p = 0;
char& pp = * p;
杜绝这种写法。
1.引用应该被初始化,因为它肯定会被初始化,指针没有这样的限制,所以使用指针前往往要测试防止为空。
2.指针可以被重新赋值指向另一个不同的对象,引用不能改变。
注:重载操作符应该使用引用。(用户使用)
2.尽量使用c++风格的类型转换
static_cast:没有继承关系的类型中进行转换
const_cast:转换掉对象的const属性 和 voliteness属性
dynamic_cast: 用于安全地沿着类的继承关系向下进行类型转换, 父类的指针或引用转换成子类的,失败返回空指针或异常。
reinterpret_cast: 处理无关类型的转换,任意指针或引用之间互相转换。 重新解释比特位。
可以用作函数指针之间进行转换:
typedef void (*FuncPtr)();
FuncPtr funcPtrAttay[10];
int doSomething();
funcPtrArray[0] = &dosomthing; //error
funcPtrArray[0] = reinterpret_cast<Funcptr>(&doSomething);//OK
尽量避免这种用法。
3.不要对数组使用多态
数组遍历 ++偏移量用的基类尺寸,所以遍历时有可能出现内存错误。
(不同平台和编译器表现不一样,vc 可以正确取到地址)
todo
4.避免无用的缺省构造函数