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)有什么区别啊?
在你的代码中,fun1 和 fun2 都接受一个整数参数 a,但是它们的返回类型不同:
fun1
fun2
a
int fun1(int a) 返回的是整数值,而不是引用。这意味着它返回 a 的一个副本。
int fun1(int a)
int& fun2(int a) 返回的是整数的引用。这意味着它返回了 a 的别名,即返回的是 a 的地址,而不是 a 的值的副本。
int& fun2(int a)
在你的 main 函数中,fun1(a) 返回的是 a 的值,而 fun2(a) 返回的是 a 的引用,这意味着对 fun2(a) 的调用会直接修改 a 的值。
main
fun1(a)
fun2(a)
但是,这里有一个问题:fun2 函数返回的是一个局部变量 a 的引用,这是不安全的,因为在函数结束后,这个引用将指向一个不再存在的内存地址,导致未定义行为。