c++ - 当我使用按引用返回时,我不知道这些代码之间的区别

标签 c++ pointers

我正在学习面向对象编程。 我不知道这些代码之间的区别。 它们都使用按引用返回,但代码#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/

相关文章:

c++ - 常量是否应该传播到成员指针指针对象?

c++ - 在类之间传递值

c++ - 多个链接 C++ 文件

C++ - 你如何在用户输入后循环?

c - 如何使用函数中的结构体指针访问结构体中的二维数组?

Cocoa - OpenGL ES - 将我的头围绕在 C 数组上

c++ - 多个包含在多个文件中

c++ - 您如何在单例和未命名类之间进行选择?

c++ - 如何将 const void* 转换为 unsigned char*?

c++ - 可以将指向子对象的指针视为指向父对象的指针吗?