您的位置:首页 > 编程语言 > C语言/C++

《C++深度剖析》学习日志二——引用

2018-02-07 22:26 141 查看
在剖析引用之前,我们先对C语言和C++中的三目运算符进行一个对比。
  C语言中的三目运算符返回值是变量值,不能作为左值。
  C++中三目运算符课直接返回变量本身,既可为左值又可为右值。

 注意:在C++中,当三目运算符的可能返回值都是变量时,返回的是变量引用。当三目运算符的可能返回值中有常量时,返回的是值。

下面我们来剖析引用
 引用涉及到变量名,我们先来说一下变量名
  *变量是一段实际连续存储空间的别名
  *通过变量名可以使用存储空间
一段连续的存储空间可以不只有一个别名。
引用就是一个已定义的变量的别名语法:Type& name = var;
注意:普通引用在定义时必须用同类型的变量进行初始化

接下来我们来深究引用
*引用作为变量的别名存在,在一定场合内可以代替指针
 *引用相对于指针来说具有更好的可读性和实用性
特殊引用const
 *const  Type&   name   =   var;
 *const引用让变量拥有只读属性

int a = 4;

const int& b = a;

int* p = (int*) &b;

b = 5;//Error,只读变量

*p = 5;//Right,修改变量a的值

 *当使用常量对const引用进行初始化时,C++编译器会为常量值分配空间,并肩引用名作为这段空间的别名。
         const   int&   b   =   1;

思考

 引用是否有存储空间

引用的本质

 *引用在C++中的内部实现是一个指针常量
 Type&   name;           Type* const name;
 void   f(int&   a)                                 void   f(int*   const   a)

 {          {

 a = 5;=    a = 5;

 }         }

注意

 1.C++编译器在编译过程中使用指针常量作为引用的内部实现,因此引用所占用的空间大小与指针相同(4字节)
 2.从使用的角度,引用只是一个别名,C++为了实用性隐藏了引用的存储空间这一细节
 3.引用可以在大多数情况下代替指针

总结

 *引用是变量别名,可代替指针
 *引用在编译时作为指针常量实现
 *引用的本质为指针
 *引用较指针而言,可以尽可能的避开内存错误

以上资料均来自狄泰,群号:199546072,志同道合的朋友可以加我:
 qq:335366243
 微信:zhong_335366243

9bf2
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: