天天看点

effecitve c++ 条款21-25条款21: 尽可能使用const条款22: 尽量用“传引用”而不用“传值”条款23: 必须返回一个对象时不要试图返回一个引用条款24: 在函数重载和设定参数缺省值间慎重选择条款25: 避免对指针和数字类型重载

继续写下去

effective c++的下载地址http://download.csdn.net/detail/mlkiller/5335383

条款21: 尽可能使用const

这个条款的意思是,能使用const的地方,都要用const. 这个条款的好处是毋庸置疑的,const是c++里面引入的,后来c语言里面也有了,说明它确实很有用。

关于const的用途,这里就不展开了。大概写一下 1 常量         const int pi = 3.1416926 2  常量指针  (内容不能变,指针可以变)

int   q = 1;
     const int   *p = &q; //正确
           
p = π //正确;
     *p  = 2; //错误;
           

3  指针常量  (指针不能变,内容可以变)

int q1 = 1;
	int * const s = &q;
	*s = 2;//正确
	s = &q1;//错误
           

   关于2,3的说明和如何记忆:    *前面的 const修饰的都是*,表示内容不能变。  const int *p 和 int const *p等价。你可以这么记忆, cosnt修饰*p,所以后面*p不能变。     *后面的const修饰的都是后面的指针变量,指针不能变。int * const p,所以这个指针一定要初始化,因为后面不能变了。  可以记忆为const 修饰p,  p不能变。

4指向常量的常量指针 (两个都不能变)

     const int *p  const  p  = &q;

这些是个基本的用法,关于const比较详细的用法,我后面专门写一篇文章,来阐述。

  这条原则就是,设计的时候考虑,哪些变量,尤其是函数的参数,哪些不能变,需要考虑清楚,使用const防止代码误操作这些变量。

条款22: 尽量用“传引用”而不用“传值”

c 语言中没有引用这个概念,因为引用实质上是指针的一种变异。 但是引用的好出呢?写法比较舒服,语法简单一些。

在c++中出现了类,所以在涉及到函数中有类的时候,最好用传引用,而不是传值。 两个好处: 1 效率高,不会频繁调用构造和析构函数 2 不会出现截断现象,父类里面的函数不会被截断。 这个在google的编程规范里面也有说明。

条款23: 必须返回一个对象时不要试图返回一个引用

这个条款的意思是,怕人们看到既然引用那么高效,那么返回值的时候会滥用引用。 引用必须有有对象的。 举个例子,如果返回值,就是函数参数里面的对象,那么使用引用就比较好了。 如果返回值需要无中生有,必须内部使用指针new一个新的对象,然后返回。但是这个时候,你需要提心吊胆的想着什么时候释放这个new出来的内存。 (构建在堆栈上的对象,函数结束的时候就消失了,用引用很危险)

这个时候就老老实实的返回对象就可以了。

条款24: 在函数重载和设定参数缺省值间慎重选择

这个条款,主要是怕函数重载和缺省直接由冲突。

一般来说,如果可以选择一个合适的缺省值并且只是用到一种算法,就使用缺省参数(参见条款38)。否则,就使用函数重载。

也就是说缺省参数,多用于一些默认的参数设置的时候,大部分情况下都使用这些默认参数,有时候会改变。 例如计算中立,我们可以默认g=9.8,但是如果在别的星球,就需要改变,但是算法都是一样的,不必要写那么多重载函数。

条款25: 避免对指针和数字类型重载

这个问题主要在于对于0到底是数组int 0 ,还是 指针 0,空指针。