c++的引用
2015-10-03 11:30
323 查看
假如定义了某个变量的别名,该别名就永远属于这个变量,它是某个变量的别名的这个身份我们无法更改,但是我们可以更改它所引用的值
定义引用的时候一定要记得对该引用进行初始化,引用就是常量,我们只能对它初始化,不能赋值,
下面用代码演示上述语句
当然也可以定义对象的别名,代码如下:
空引用:
我们知道指针进行删除操作后,需要将他们赋值为空,而引用却不需要这么做,这是因为引用是原来对象的别名,假如该对象存在于栈中,那么在对象超出作用域的时候别名会和对象一起消失,加入该对象存在于堆中,由于堆中的内存空间必须使用指针来访问,因此也用不着别名,即使再定义一个该指针的别名,那么将改地址删除并赋空之后该指针的别名中的地址也相应的赋空了
定义引用的时候一定要记得对该引用进行初始化,引用就是常量,我们只能对它初始化,不能赋值,
下面用代码演示上述语句
#include <iostream> using namespace std; int main() { int a; int &ra = a; a = 999; cout << "&a:\t" << &a << endl; cout << "&ra:\t" << &ra << endl; cout << "\n"; int b = 888; ra = b; cout << "&a:\t" << &a << endl; cout << "&ra:\t" << &ra << endl; cout << "&b:\t" << &b << endl; cout << "a:\t" << a << endl; cout << "ra:\t" << ra << endl; cout << "b:\t" << b << endl; cout << "\n"; ra = 1; cout << "&a:\t" << &a << endl; cout << "&ra:\t" << &ra << endl; cout << "&b:\t" << &b << endl; cout << "a:\t" << a << endl; cout << "ra:\t" << ra << endl; cout << "b:\t" << b << endl; return 0; }
当然也可以定义对象的别名,代码如下:
/*定义对象的别名*/ #include <iostream> using namespace std; class Human { public: int get() {return i;} void set(int x) {i = x;} private: int i; }; int main() { Human Mike; Human &rMike = Mike; rMike.set(111); cout << "Mike:" << Mike.get() << endl; cout << "rMike:" << rMike.get() << endl; return 0; }
空引用:
我们知道指针进行删除操作后,需要将他们赋值为空,而引用却不需要这么做,这是因为引用是原来对象的别名,假如该对象存在于栈中,那么在对象超出作用域的时候别名会和对象一起消失,加入该对象存在于堆中,由于堆中的内存空间必须使用指针来访问,因此也用不着别名,即使再定义一个该指针的别名,那么将改地址删除并赋空之后该指针的别名中的地址也相应的赋空了
相关文章推荐
- C2第一次作业
- C++学习(一)- 虚函数和重载函数的区别(3)
- 【C++】c++复数类Complex
- 指针做函数参数——高效C语言
- 【Cpp】删除字符串空格
- Bjarne Stroustrup announces C++ Core Guidelines
- 顺序表的实现C++封装
- c++ primer 练习5.22
- c语言的正则表达式
- c++ primer 练习5.21
- C语言中函数参数为什么是由右往左入栈的?
- c++ primer 练习5.20
- C/C++堆区、栈区、常量区、静态数据区、代码区详解
- C++ STL vector assign用法
- C语言快速入门系列-详解
- C++primer学习:顺序容器(2)
- 软件工程(C编码实践篇)介绍
- leetcode笔记:Path Sum II
- 项目26.4个人所得税计算器switch语句
- C/C++中static关键字总结