我正在学习面向对象编程。 我不知道这些代码之间的区别。 它们都使用按引用返回,但代码#1 运行良好但代码#2 运行不佳。 教授说当我存储交换函数的返回值时代码#2 有问题,它导致了问题。 但我不知道为什么。
请告诉我为什么以及两个代码的区别。
代码#1:
#include <iostream>
using namespace std;
struct Pair {
int first;
int second;
};
Pair& swap(Pair&);
int main()
{
Pair p1 = {10, 20};
Pair p2 = swap(p1);
return 0;
}
Pair& swap(Pair& pair)
{
int temp;
temp = pair.first;
pair.first = pair.second;
pair.second = temp;
return pair;
}
代码#2:
#include <iostream>
using namespace std;
struct Pair {
int first;
int second;
};
Pair& swap(int num1, int num2);
int main()
{
Pair p = swap(10, 20);
return 0;
}
Pair& swap(int num1, int num2)
{
int temp;
temp = num1;
num1 = num2;
num2 = temp;
Pair pair = {num1, num2};
return pair;
}
最佳答案
不同之处在于,在代码#1 中,main()
函数声明了变量pair
,因此它存在于main()< 的范围内
。在代码 #2 中,swap()
函数声明了变量 pair
,因此它只存在于 swap()
函数的范围内并且一次你离开交换函数,变量被销毁。
关于c++ - 当我使用按引用返回时,我不知道这些代码之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58335387/