小能豆

int& fun2(int a)和int fun1(int a)有什么区别啊?

javascript

include

using namespace std;
int fun1(int a)
{
return a;
}
int& fun2(int a)
{
return a;
}

int main(void)
{
int a = 10;

cout << fun1(a) << endl;
cout << fun2(a) << endl;

}

int& fun2(int a)和int fun1(int a)有什么区别啊?


阅读 57

收藏
2024-06-03

共1个答案

小能豆

在你的代码中,fun1fun2 都接受一个整数参数 a,但是它们的返回类型不同:

  1. int fun1(int a) 返回的是整数值,而不是引用。这意味着它返回 a 的一个副本。

  2. int& fun2(int a) 返回的是整数的引用。这意味着它返回了 a 的别名,即返回的是 a 的地址,而不是 a 的值的副本。

在你的 main 函数中,fun1(a) 返回的是 a 的值,而 fun2(a) 返回的是 a 的引用,这意味着对 fun2(a) 的调用会直接修改 a 的值。

但是,这里有一个问题:fun2 函数返回的是一个局部变量 a 的引用,这是不安全的,因为在函数结束后,这个引用将指向一个不再存在的内存地址,导致未定义行为。

2024-06-03