关闭

引用小结

608人阅读 评论(0) 收藏 举报
1.   定义的时候应该将引用运算符放在类型名后面,如
int& rInt;
虽然int &rInt;   int & rInt; 都是对的,但是最好还是不要这样做。
2.   引用的地址与所引用的目标的地址是同一地址,如
int& rInt = intOne;
这样&rInt的值和&intOne的值是一样的。
3.   引用一旦初始化,就钉在初始的目标上。任何对该引用的赋值都只是对引用的目标赋值,而不是将引用钉在另一个目标上。如
int intOne = 5;
int intTwo = 8;
int& rInt = intOne;
rInt = intTwo;
这样3个变量的值都是8,但是intOnerInt占用同一内存,intTwo占用另一内存。并没有由于执行了rInt = intTwo,而说rIntintTwo占用同一内存。
4.   下面的代码是合法的:
double& rr = 1;
这条语句解释为:
double temp;
temp = double(1);
double& rr = temp;
5.   void进行引用是不允许的。例如: void& a =3;
6.   不能建立引用的数组:
int a[10];
int& ra[10] = a;   //error
因为数组名是该元素集合空间的起始地址,已经不是一个名副其实的数据类型了。
7.   引用不是类型,所以没有引用的引用,也没有引用的指针,如下是错的:
int& ra = a;
int& * p = &ra;            //error,企图定义引用的指针
8.   有空指针,无空引用:
int& ri = NULL;           //无意义
9.   由于指针也是变量,所以可以有指针变量的引用:
int* a;
int* & p = a;      //表示int *的引用p初始化为a
int b = 8;
p = &b;         //OK
10.函数返回值时,要生成一个值的副本,而用引用返回值时,不生成值的副本。
11.传递参数时,用引用和指针,容易在函数内无意中修改了目标的值。保护时参不被修改的办法是传递const指针和引用。
12.对引用的初始化,可以是变量,可以是常量,也可以是一定类型的堆空间变量。但是,由于引用不是指针,所以直接从堆中获得变量空间来初始化引用是错的:
    int& a = new int(2);        //error,可能分配空间失败
    正确的做法应该是:
    int* pInt = new int;
    if(pInt ==NULL)
    {
       cout<<”error memory allocation”;
       return;
    }
    int& rInt = *pInt;
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:4034次
    • 积分:104
    • 等级:
    • 排名:千里之外
    • 原创:3篇
    • 转载:0篇
    • 译文:0篇
    • 评论:10条
    文章分类
    文章存档