C++ 引用作为返回值
函数也可以返回一个引用,方式与返回一个指针类似,通常的做法是使用引用替代指针
double nums[] = {11.11, 12.58, 12.21, 25.25, 88.8}; double& setNum( int i ) { return nums[i]; // 返回第 i 个元素的引用 }
当函数返回一个引用时,返回的是一个指向返回值的隐式指针
因此,我们可以把返回引用的函数作为左值,例如
setNum(1) = 203.302;
有点意思吧,我们写一个小范例试一试
/** * file: main.cpp * author: 简单教程(www.twle.cn) * * Copyright © 2015-2065 www.twle.cn. All rights reserved. */ #include <iostream> double nums[] = {11.11, 12.58, 12.21, 25.25, 88.8}; double& setNum( int i ) { return nums[i]; // 返回第 i 个元素的引用 } int main () { std::cout << "改变前的值" << std::endl; for ( int i = 0; i < 5; i++ ) { std::cout << "nums[" << i << "] = "; std::cout << nums[i] << std::endl; } setNum(1) = 203.302; // 改变第 2 个元素 setNum(3) = 708.807; // 改变第 4 个元素 std::cout << "改变后的值" << std::endl; for ( int i = 0; i < 5; i++ ) { std::cout << "nums[" << i << "] = "; std::cout << nums[i] << std::endl; } return 0; }
编译和运行以上范例,输出结果如下
改变前的值 nums[0] = 11.11 nums[1] = 12.58 nums[2] = 12.21 nums[3] = 25.25 nums[4] = 88.8 改变后的值 nums[0] = 11.11 nums[1] = 203.302 nums[2] = 12.21 nums[3] = 708.807 nums[4] = 88.8
注意事项
-
当返回一个引用时,被引用的对象不能超出作用域
返回一个对局部变量的引用是不合法的,
int& func() { int q; return q; // 在编译时发生错误 }
-
可以返回一个对静态变量的引用
int& func() { static int x; return x; // 安全,x 在函数作用域外依然是有效的 }