指针引用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; //错误;

    


    

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

    


	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,空指针。

    


文章结束给大家分享下程序员的一些笑话语录: 一个合格的程序员是不会写出 诸如 “摧毁地球” 这样的程序的,他们会写一个函数叫 “摧毁行星”而把地球当一个参数传进去。

你可能感兴趣的:(C++)