《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;
Type& name; Type* const name;
void f(int& a) void f(int* const a)
{ {
a = 5;= a = 5;
} }
2.从使用的角度,引用只是一个别名,C++为了实用性隐藏了引用的存储空间这一细节
3.引用可以在大多数情况下代替指针
*引用在编译时作为指针常量实现
*引用的本质为指针
*引用较指针而言,可以尽可能的避开内存错误
以上资料均来自狄泰,群号:199546072,志同道合的朋友可以加我:
qq:335366243
微信:zhong_335366243
9bf2
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
相关文章推荐
- 《C++深度剖析》学习日志九——深入探究const和引用
- 《C++深度剖析》学习日志六——函数重载(下)
- 《C++深度剖析》学习日志七——动态内存与命名空间
- 《C++深度剖析》学习日志八——数据类型转换
- 《C++深度剖析》学习日志十——类
- 《C++深度剖析》学习日志一——const关键字
- 《C++深度剖析》学习日志三——内联函数
- 《C++深度剖析》学习日志四——函数参数
- 设计模式学习日志(15)-Command命令(行为型模式) (引用)
- 《C++深度剖析》学习日志五——函数重载(上)
- Javascript学习日志 (三) 引用类型
- shell 脚本完成对日志文件的提取之grep 学习
- java按值传参与按引用传参_旺旺老师Java学习解决方案_第一季
- C#:MVC引用Log4Net生成错误日志
- 学习日志2018.1.10
- CUDA学习日志:入门例程和编程接口
- Python学习之环境搭建及模块引用
- 黑马程序员---ios学习日志8
- javaweb学习日志一
- Linux下命令学习日志