码迷,mamicode.com
首页 > 编程语言 > 详细

c++ 引用

时间:2015-04-24 21:03:27      阅读:190      评论:0      收藏:0      [点我收藏+]

标签:

对于引用,网上很多说类似一个变量的别名,差不多就是这意思,引用和他绑定的那个变量 如果用取地址操作 给出的地址是一样的。 引用的创建不会占用空间

这个说法略不严谨.. 因为取地址相同所以说他不占空间。 在编译阶段好像把引用当成 const 指针来处理, 而且不同的编译器 可能还有些差别。(

(在哪看到过 关于 c++ 历史的,好像说 引用 这个概念 是在 指针 之后提出的 ,  不然 this 指针 就可能 会被改成引用)

 

1)创建引用是必须初始化的。因为 在引用 上 写出 初始化和赋值是一样形式的

1 int main()
2 {
3     int i  = 35;
4     int & refI = i; // 初始化
5     int j = 3;
6     refI = j ; // 形式上和 初始化一样 但是 是 赋值 改变了i的值
7     return 0;
8 }

2)不能建立 引用的数组(如int& refArray[3];),至于为啥. 也不能给出个很实在的答案.. 有说 如果建立引用的数组则 & 会有二义性.. 没理解
但是 数组的引用可以

3) 引用的主要用途是 用在函数上。 函数参数 和 函数的 返回值 , 因为有值传递 不会修改源数据的 情况,通过引用传递可以直接修改源参数(换种理解 也就是 函数的参数不具备返回值的能力), 同时避免 值传递中的数据拷贝, 当参数占空间很大时 拷贝用的时间空间都很大

在使用引用时 要小心 引用的对象一定要存在。 典型的情况是 返回局部引用

1      int& func()
2     {
3         int i;
4         return i; // 当函数退出时 i 已经没了
5     } 

4) 引用和const

    int i = 35;
    const int & refI = i;
    refI++; //error  vs2012 提示 必须是可修改的左值  i++ 可以

5) 易忽视的  所以一般能加const 修饰 就尽量加

1 void func(string & s)
2 {
3 }
4 int main()
5 {
6 func("Hello World"); // 这里是错误的 字符串 被系统默认为 const char[12] 
7 return 0;
8 }

6) 引用和多态
在学类的时候有多态这个概念

c++ 引用

标签:

原文地址:http://www.cnblogs.com/-Mohan/p/4285214.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!