当函数返回引用时,它返回的是一个指向返回值的隐式指针。这样,函数就可以被放在赋值语句的左边!
示例代码-1:
[C++] 纯文本查看 复制代码
#include <iostream>
using namespace std;
double val = 18.8;
double &retquote()
{
return val;
}
int main()
{
double newval;
newval = retquote();
cout << newval << '\\n';
retquote() = 19.9; // 改变了全局变量 val 的值
cout << retquote() << '\\n';
return 0;
}
运行输出:$ ./return_quote
18.8
19.9 注意上面代码中对 retquote() 函数的返回形式写法。另外,19.9 通过 retquote() 所返回的引用被间接地赋值给了 val 。
示例代码-2:
[C++] 纯文本查看 复制代码 #include <iostream>
using namespace std;
double &change_it(int i);
double vals[] = {1.1, 2.2, 3.3, 4.4, 5.5};
int main()
{
int i;
cout << "Here are the original values: ";
for (i = 0; i < 5; i++)
cout << vals[i] << ' ';
cout << '\\n';
change_it(1) = 1314.255;
change_it(3) = -255.1314;
cout << "Here are the changed values: ";
for (i = 0; i < 5; i++)
cout << vals[i] << ' ';
cout << '\\n';
return 0;
}
double &change_it(int i)
{
return vals[i];
}
运行输出:$ ./return_quote2
Here are the original values: 1.1 2.2 3.3 4.4 5.5
Here are the changed values: 1.1 1314.26 3.3 -255.131 5.5 程序中队 change_it() 函数声明为返回 double 类型的引用,它返回的是由参数 i 指定的一个数组成员的引用。所以我们对返回值的修改就是对数组元素的修改。
注意,当函数返回一个引用时,被引用的对象不能超过作用区域,比如不能返回一个函数局部变量的引用。 |