C++是c的优化

来源:互联网 发布:为什么淘宝充值便宜 编辑:程序博客网 时间:2024/06/05 15:47

1.c++中我们提倡使用const char * const authorName = "Scott Meyers";这样的方式,对于指针我们要使指针本身常量化,也要使指针所指的变量常量化。这就是上面这样做的原因。

2.对于define所造成的混乱:

#define max(a,b) ((a) > (b) ? (a) : (b))

int a = 5, b = 0;

max(++a, b);// a 的值增加了2

max(++a, b+10); // a 的值只增加了1

内联函数解决了这个问题:

template<class T>

inline const T& max(const T& a, const T& b)

{ return a > b ? a : b; }

 

3. string *stringarray1 =static_cast<string*>(malloc(10 * sizeof(string)));

string *stringarray2 = new string[10];

其结果是,stringarray1确实指向的是可以容纳10string对象的足够空间,但内存里并没有创建这些对象。而且,如果你不从这种晦涩的语法怪圈(详见条款m4m8的描述)里跳出来的话,你没有办法来初始化数组里的对象。换句话说,stringarray1其实一点用也没有。相反,stringarray2指向的是一个包含10个完全构造好的string对象的数组,每个对象可以在任何读取string的操作里安全使用。

newdeletemallocfree混在一起用也是个坏想法。对一个用new获取来的指针调用free,或者对一个用malloc获取来的指针调用delete,其后果是不可预测的。大家都知道不可预测的意思:它可能在开发阶段工作良好,在测试阶段工作良好,但也可能会最后在你最重要的客户的脸上爆炸。

如果你调用new时用了[],调用delete时也要用[]。如果调用new时没有用[],那调用delete时也不要用[]
原创粉丝点击