您的位置:首页 > 其它

常引用(const type&)的特性及引用的本质

2017-11-30 15:47 337 查看

常引用(const type&)的特性及引用的本质

#include "stdafx.h"
#include <iostream>
using namespace std;

#if 0

----常引用
const 引用有较多使用。它可以防止对象的值被随意修改。因而具有一些特性。

(1)const 对象的引用必须是 const 的,将普通引用绑定到 const 对象是不合法的。
既然对象是 const 的,表示不能被修改。引用当然也不能修改,必须使用 const 引用。
所以 const int a = 1; int &b = a; 这种写法是不合法的,编译通不过。

(2)const 引用可使用相关类型的对象(常量、非同类型的变量或表达式)初始化。
这个是 const 引用与普通引用最大的区别。const int &a = 2; 是合法的。
double a = 3.14; const int &b = a; 也是合法的

#endif

struct T{int* p;};

struct TT{double &a;};

int _tmain(int argc, _TCHAR* argv[])
{
double val = 3.14;
double & ref2 = val;//正常使用

const int &ref = val;
//新开辟了一个未命名的空间,以只读的方式引用 数值固定 不能更改
//也就是 ref是这个未命名空间的引用 储存的只是相应数值 与val再无任何关系

cout << ref << " " << ref2 <<"--"<<val<< endl; //3  3.14
val = 4.14;  //val改变不会影响到未命名空间的值
cout << ref << " " << ref2 <<"--"<<val<< endl; //3  4.14

cout << sizeof(T) << endl;//4
cout << sizeof(TT) << endl;// 大小也为4 引用的本质就是指针

int a;
int &ra = a;
ra = 200;//ra可以改变数据

int b;
//&ra = b; ra不能再次指向另一个变量

//所以引用的本质是常指针类型 type* const  p
//之所以const只修饰p代表 它所指向的地址是固定的
//而*p也就是代表着内容(变量的值)是可以更改的
//这符合引用的性质

//引用的本质是,是对常指针 type * const p 的再次包装。

return 0;
}

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