对于引用,网上很多说类似一个变量的别名,差不多就是这意思,引用和他绑定的那个变量 如果用取地址操作 给出的地址是一样的。 引用的创建不会占用空间
这个说法略不严谨.. 因为取地址相同所以说他不占空间。 在编译阶段好像把引用当成 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) 引用和多态
在学类的时候有多态这个概念