在学习这本书的过程中自己并不是对知识点理解得很透彻,毕竟我没有参加过一些项目,只是自己随便写写代码。可能没有太多的醍醐灌顶的时候,写下这篇文章是希望能给自己总结的同时能帮助一些对C++感兴趣的朋友,对于文章中不正确的地方希望大家能够多多指正。
1.引用必须要初始化
一般来说在创建指针的时候是可以不用赋值的,没有赋值的指针在编译的是可以通过的,只不过会产生一个警告提示你没有赋值。然后引用是必须在创建的时候需要被赋值的,否则会被报错。
然后下面的代码很好玩:
char* s = 0;
char& r = *s;
这样投机取巧的办法是可以通过编译的,但同时会造成很严重的后果(至于会有什么后果我就不知道了,怕电脑爆炸。。)
虽然引用必须初始化很麻烦,但同时也带来了一些优点,比如很多时候不需要像测试指针那样测试这个引用是否为空。
void Test(const int *s)
{
if(s) //还要测试指针是否合法,很麻烦。
{
xxxx ;
}
}
2.引用永远只能指向一个对象
char *pc = 0;
char *pa = 0;
char &test = *pc;
test = *pa;
这样是能编译通过的,但实际上test的值是没有发生改变的,依旧是pc的引用。
3.重载运算符最好用引用
重载运算符这个知识点在书上看到的基本都是用引用作为返回变量。当然用指针也是可以的,只不过会比较麻烦。
比如我们要重载的是 [ ],如果我们采用指针作为返回值,就会变为这样:
Student s[5]; //Student是一个类
*s[5].iValue = 10; //把10赋予s[5]中的iValue
可以看出这样跟我们平时学习的数组很不一样,有个 * 无疑干扰了看代码的人。
如果我们返回是采用引用作为返回值,就会变成这样:
s[5].iValue = 10;
这样就清晰了很多。
好,书上的知识大概就总结了这么多,希望能给初学者一些帮助。