在声明引用时,需要使用&符号,同时必须初始化引用。
<类型>& <引用名称> = <所引用的对象>;
<类型>&<别名>=<原来的名字>。
可以通过修改引用的值(别名),来修改原始变量名的值。
例子:int& ref = variable;
#include <iostream>
int main()
{
int variable = 42;
int& ref = variable; // 声明引用并初始化
ref = 56; // 修改引用的值,同时也修改了原始变量的值
std::cout << variable << std::endl; // 输出:56
return 0;
}
*
来访问对象,而指针需要使用*
运算符进行解引用。#include <iostream>
int main()
{
int variable = 42;
int* ptr = &variable; // 声明指针并初始化,指向变量variable
int& ref = variable; // 声明引用并初始化,指向变量variable
*ptr = 56; // 修改指针所指向的变量的值
std::cout << variable << std::endl;// 输出:56
ref = 78; // 修改引用所指向的变量的值
std::cout << variable << std::endl; // 输出:78
return 0;
}
const
关键字来避免对原始对象的修改。#include <iostream>
void changeValue(int& ref)
{
ref = 99; // 修改引用所指向的变量的值
}
int main()
{
int variable = 42;
changeValue(variable); // 传递变量的引用给函数
std::cout << variable << std::endl; // 输出:99
return 0;
}
#include <iostream>
int& getVariable()
{
int variable = 42;
return variable; // 错误!不能返回局部变量的引用
}
int main()
{
int& ref = getVariable(); // 使用引用接收函数的返回值
std::cout << ref << std::endl; // 输出:未定义的值(非法操作!)
return 0;
}
注释:在这个例子中,我们定义了一个函数getVariable
,它返回一个整数的引用。然而,函数内部的变量variable
是一个局部变量,当函数执行完毕后,该变量将被销毁。所以返回它的引用是错误的,会导致未定义行为。
const
关键字,用来指示引用的对象是常量。例如:const int& ref = variable;
#include <iostream>
void printValue(const int& ref)
{
// ref引用的是常量,不可修改
// ref = 10; // 错误,不能修改常量引用所引用的对象
std::cout << "The value is: " << ref << std::endl;
}
int main()
{
int variable = 42;
const int& ref = variable;
printValue(ref); // 调用函数并传递常量引用
return 0;
}