C++引用
程序员文章站
2024-01-03 08:49:40
...
引用
引用不是定义一个新的变量,而是给一个已经定义的变量重新起一个别名。
定义的格式为:
类型 &引用变量名 = 已定义过的变量名;
引用的特点:
- 一个变量可取多个别名
- 引用必须初始化
- 引用只能在初始化的时候引用一次,不能改变为再引用其他的变量。
void TestReference1()
{
int a = 1;
int& b = a;
cout << "a:address->" << &a << endl;
cout << "b:address->" << &b << endl;
a = 2;
b = 3;
int& c = b; // 引用一个引用变量,别名的别名
c = 4;
}
const 引用
void TestReference2()
{
int r1 = 4;
const int &d1 = r1;
r1 = 5; // r1改变 d1的值也会改变。
//d1 = 6; // 不能给常量(不能被修改的量)赋值
const int r2 = 1;
const int &d2 = r2;
//int &d3 = r2; // 错误的:试图让一个非常量引用指向一个常量对象
const int &d4 = 5; // 正确:常量具有常性,只有常量引用可以引用常量
const int &d5 = r1 * 2; // 正确:d5是一个常量引用
//int &d6 = r1 * 2; // 错误的: 非常量引用不能引用常量
double r3 = 1.1;
//int &d7 = r3; // r3是double类型,d7是int,r3赋值给 d7时要生成一个临时量对象
// 也就是说d8引用的是这个带有常性的临时量对象,所以不能赋值。
// 临时值对象指当编译器需要一个空间暂存表达式的求值结果时临时创建的一个未命名的对象。
// c++程序员们常把临时两对象简称临时量
const int &d8 = r3;
//const int temp = r3; //由双精度浮点数生成一个临时的整形变量
//const int &d8 = temp;
}
引用和指针的区别和联系
- 引用只能在定义时初始化一次,之后不能改变指向其它变量(从一而终);指针变量的值可变。
- 引用必须指向有效的变量,指针可以为空。
- sizeof指针对象和引用对象的意义不一样。sizeof引用得到的是所指向的变量的大小,而sizeof指针是对象地址的大小。
- 指针和引用自增(++)自减(–)意义不一样。
- 相对而言,引用比指针更安全
- 指针比引用更灵活,但是也更危险。使用指针时一定要注意检查指针是否为空。指针所指的地址释放以后最好置0,否则可能存在野指针 问题