首页 新闻 会员 周边 捐助

c++初学者遇见的问题

0
悬赏园豆:5 [已解决问题] 解决于 2024-11-13 16:49

include<iostream>

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)有什么区别啊?

C++
溯流的主页 溯流 | 菜鸟二级 | 园豆:207
提问于:2024-04-14 20:20
< >
分享
最佳答案
0
#include <iostream>
using namespace std;
int fun1(int a);
int& fun2(int a);
int main() {
    int a = 10;
    cout << fun1(a) << endl;
    cout << fun2(a) << endl;
}
int fun1(int a) {
    return a;
}
int& fun2(int a) {
    return a;
}

上述代码可以成功运行,但是会发出警告:

app.cpp: In function 'int& fun2(int)':
app.cpp:13:15: warning: reference to local variable 'a' returned [-Wreturn-local-addr]  
 int& fun2(int a) {
           ~~~~^
10

另外,它没有打印出 fun2 的返回值,该函数理应返回某个对象的引用,引用在初始化后不能更改,始终指向同一个变量,且不能为空,而在 fun2 中,该函数返回的是内部变量的引用,该变量的声明周期限制在 fun2 的作用域内,一旦 fun2 返回,其内部变量就会被销毁,这时候返回的引用所引用的是一个不存在的对象。

参考:

收获园豆:5
gaotianchi | 菜鸟二级 |园豆:211 | 2024-04-24 20:59
其他回答(2)
0

在yiyan.baidu.com和https://tongyi.aliyun.com/ 输入“ c++中 int& fun2(int a)和int fun1(int a)有什么区别啊?”
给的解释比较全面。 传值 传地址的差别

2012 | 园豆:21645 (高人七级) | 2024-04-14 20:49

可以具体讲一下吗

支持(0) 反对(0) 溯流 | 园豆:207 (菜鸟二级) | 2024-04-14 20:51
0

首先你这个能编译通过?
func2函数中a为临时变量,当func2执行结束后,临时变量a会被销毁,此时你还以引用的方式返回,那不就有问题了吗
至于以int和int& 的区别,可以理解为int&拿到的是变量的地址(可做左值),可以对该内存空间继续做运算(可以参考下string 重载等号运算符的实现),int的话,它就是一个变量,做右值

牛犁heart | 园豆:202 (菜鸟二级) | 2024-04-21 17:03
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册