#include<iostream>
using namespace std;
int main()
{
int a = 10;//对变量引用
/* int &b = a;
const int a = 10;
const int &b = a;//如果引用不加const,有被修改的嫌疑
int a = 10;
const int &b = a;//b加const,只能代表b自身不能改变
*/
const double d = 12.34;
const int &f = d;//把12提取,放到一个临时空间,然后用f指向他,该值不可修改,要加const
cout << &d << " " << &f << endl;
//0x7fffc50e5ed8 0x7fffc50e5ed4
//
const double dval = 1024;
const int& ri = dval;
cout << &dval << " " << &ri << endl;
//0x7ffffcabb2a0 0x7ffffcabb294
//编译器将其转换为const double dval = 1024;int temp = dval;const int& ri = temp;
//因为有了临时对象,引用和类型转换实现了,
int* p = &a;//对指针引用
int* &q = p;
int array[10]={1,2,3,4,5,6,7,8,9,0};//对数组引用
int (&brray)[10] = array;
return 0;
}
const引用:引用在内部存放的是被引用对象的地址,不可寻址的值是不能引用的;当引用作为形参时,实参也不能使用不可寻址的值,更不可能进行类型转换(如:实数转换为整数)。但是const引用不同,它是只读的,为了绝对保证不会发生误改,编译器实现const引用时,生成一个临时对象,引用实际上指向该临时对象,但用户不能访问它。所以const引用可以实现不可寻址的值(包括字面常量)的引用,例如:
const double dval=1024; const int &ri=dval;
是正确的,编译器将其转换为:
const double dval=1024; int temp=dval; const int &ri=temp;
因有临时对象,引用和类型转换都实现了。当const引用作为形参时,实参也能使用不可寻址的值,并能进行类型转换
|