gpt4 book ai didi

c++ 从函数返回对象

转载 作者:行者123 更新时间:2023-12-04 14:57:44 26 4
gpt4 key购买 nike

下面的代码显示了一个表示复数的类。我的兴趣在于理解 operator+ 函数。据我了解,Complex res 应该分配在函数 operator+ 的框架上。将这个对象返回给调用者是否正确?到此函数返回时,框架将被弹出,但 res 将继续由调用者使用。除非这比看起来更复杂,否则像实际的 return res 可能实际上是将对象从当前帧复制到调用者的帧。另一种可能性是 operator+ 函数内的代码可能在 main 的调用站点上被内联?根据我对语言的有限理解,在类中声明的函数默认情况下在调用站点上内联。任何帮助将不胜感激。

#include<iostream>
using namespace std;

class Complex {
private:
int real, imag;
public:
Complex(int r = 0, int i =0) {real = r; imag = i;}

Complex operator+(Complex const &obj) {
Complex res;
res.real = real + obj.real;
res.imag = imag + obj.imag;
return res;
}
void print() { cout << real << " + i" << imag << endl; }
};

int main()
{
Complex c1(10, 5), c2(2, 4);
Complex c3 = c1 + c2;
c3.print();
}

在阅读下面的评论和答案后添加以下部分以阐明解决方案

我用以下内容更新了上面的代码:

#include<iostream>
using namespace std;

class Complex {
private:
int real, imag;
public:
Complex(int r = 0, int i =0) {real = r; imag = i;}

Complex operator+(Complex const &obj) {
Complex res;
res.real = real + obj.real;
res.imag = imag + obj.imag;
cout << "Address inside the function " << &res << "\n";
return res;
}
void print() { cout << real << " + i" << imag << endl; }
};

int main()
{
Complex c1(10, 5), c2(2, 4);
Complex c3 = c1 + c2;
cout << "Address outside the function " << &c3 << "\n";
c3.print();
}

输出显示堆栈的两个不同区域上的两个不同地址,指示在返回期间按值复制:

Address inside the function 0x7fffbc955610
Address outside the function 0x7fffbc955650

最佳答案

Is it correct to return this object to the caller?

C++ 支持按引用返回和按值返回。由于您没有使用按引用返回,因此您没有将对象的引用返回给调用者。您正在使用按值返回,因此您将对象的 返回给调用者。考虑:

int foo()
{
int i = 2;
return i;
}

这会返回值 2。它不会返回对象 ii 本身在 return 之后不再存在并不重要,因为它的值已经被用来确定返回的值。

关于c++ 从函数返回对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67623843/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com