More Effective C++ 学习笔记一:基础部分

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.避免无用的缺省构造函数

发布了35 篇原创文章 · 获赞 5 · 访问量 386

猜你喜欢

转载自blog.csdn.net/qq_33776188/article/details/104557602
今日推荐