C++引用作为函数返回值
发布时间:2023-06-06 13:04:44 所属栏目:语言 来源:
导读:引用除了可以作为函数形参,还可以作为函数返回值,请看下面的例子:
#include <iostream>
using namespace std;
int &plus10(int &r) {
r += 10;
return r;
}
int main() {
int num1 = 10;
#include <iostream>
using namespace std;
int &plus10(int &r) {
r += 10;
return r;
}
int main() {
int num1 = 10;
引用除了可以作为函数形参,还可以作为函数返回值,请看下面的例子: #include <iostream> using namespace std; int &plus10(int &r) { r += 10; return r; } int main() { int num1 = 10; int num2 = plus10(num1); cout << num1 << " " << num2 << endl; return 0; } 运行结果: 20 20 在将引用作为函数返回值时应该注意一个小问题,就是不能返回局部数据(例如局部变量、局部对象、局部数组等)的引用,因为当函数调用完成后局部数据就会被销毁,有可能在下次使用时数据就不存在了,C++ 编译器检测到该行为时也会给出警告。 更改上面的例子,让 plus10() 返回一个局部数据的引用: #include <iostream> using namespace std; int &plus10(int &r) { int m = r + 10; return m; //返回局部数据的引用 } int main() { int num1 = 10; int num2 = plus10(num1); cout << num2 << endl; int &num3 = plus10(num1); int &num4 = plus10(num3); cout << num3 << " " << num4 << endl; return 0; } 在 Visual Studio 下的运行结果: 20 -858993450 -858993450 在 GCC 下的运行结果: 20 30 30 在 C-Free 下的运行结果: 20 30 0 而我们期望的运行结果是: 20 20 30 plus10() 返回一个对局部变量 m 的引用,这是导致运行结果非常怪异的根源,因为函数是在栈上运行的,并且运行结束后会放弃对所有局部数据的管理权,后面的函数调用会覆盖前面函数的局部数据。本例中,第二次调用 plus10() 会覆盖第一次调用 plus10() 所产生的局部数据,第三次调用 plus10() 会覆盖第二次调用 plus10() 所产生的局部数据。 (编辑:汽车网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |