指针引用effecitve c++ 条款21-25
查了好多资料,发现还是不全,干脆自己整理吧,至少保证在我的做法准确的,以免误导读者,也是给自己做个记录吧!
继承写下去
条款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,空指针。
文章结束给大家分享下程序员的一些笑话语录:
一个合格的程序员是不会写出 诸如 “摧毁地球” 这样的程序的,他们会写一个函数叫 “摧毁行星”而把地球当一个参数传进去。