C++引用的详细解释
变量名,本身是一段内存的引用,即别名(alias)。此处引入的引用,是为己有变量起一个别名。
声明如下
1 2 3 4 5 |
|
1.规则
1.引用没有定义,是一种关系型声明。声明它和原有某一变量的关系。类型与原有类型保持一致,且不分配内存。与被引用的变量有相同的地址。
2.声明的时候必须初始化,一经声明,不可变更。
3.可对引用,再次引用。多次引用的结果,是某一个变量具有多个别名。
4.&符号前面有数据类型时,是引用。其他均为取地址。
1 2 3 4 5 6 7 8 9 10 11 |
|
2.应用
1.值作函数参数
1 2 |
|
2.引用作函数参数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
c++中引入引用后,可以用引用解决的问题。避免用指针来解决。
3.引用提高
引用的本质是指针,C++对裸露的内存地址(指针)作了一次包装。又取得指针的优良特性。所以再对引用取地址,建立引用的指针没有意义
1.可以定义指针的引用,但不能定义引用的引用。
1 2 3 4 5 |
|
例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
|
2.可以定义指针的指针,不能定义引用的指针。
1 2 3 4 5 |
|
3.可以定义指针数组,但不能定义引用数组,可以定义数组引用。
1 2 3 4 5 |
|
4.常引用
const 引用有较多使用。它可以防止对象的值被随意修改。因而具有一些特性。
(1)const 对象的引用必须是 const 的,将普通引用绑定到 const 对象是不合法的。
这个原因比较简单。既然对象是 const 的,表示不能被修改,引用当然也不能修改,必须使用 const 引用。实际上,const int a=1; int &b=a;这种写法是不合法的,编译不过。
(2)const 引用可使用相关类型的对象(常量,非同类型的变量或表达式)初始化。
这个是const 引用与普通引用最大的区别。const int &a=2;是合法的。double x=3.14; const int&b=x;也是合法的。
4.常引用原理
const 引用的目的是,禁止通过修改引用值来改变被引用的对象。const 引用的初始化特性较为微妙,可通过如下代码说明
1 2 3 4 5 6 |
|
上述输出结果为 3 3.14 和 3 4.14。因为 ref 是 const 的,在初始化的过程中已经给定值,不允许修改。而被引用的对象是 val,是非 const 的,所以 val 的修改并未影响 ref 的值,而 ref2 的值发生了相应的改变。
那么,为什么非 const 的引用不能使用相关类型初始化呢?实际上,const 引用使用相关类型对象初始化时发生了如下过程:
1 2 |
|
如果 ref 不是 const 的,那么改变 ref 值,修改的是 temp,而不是 val。期望对 ref 的赋值会修改 val 的程序员会发现 val 实际并未修改。
1 2 3 4 5 |
|
5.const的好处
1,使用 const 可以避免无意修改数据的编程错误。
2,使用 const 可以处理 const 和非 const 实参。否则将只能接受非 const 数据。
3,使用 const 引用,可使函数能够正确的生成并使用临时变量(如果实参与引用参数不匹配,就会生成临时变量)
6.引用的本质浅析
1.大小与不可再引用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
结论:引用的本质是,是对常指针 type * const p 的再次包装。
1 2 3 |
|
总结
本篇文章就到这里了,希望能够给你带来帮助
