的函数返回的对象我有一个小程序,其中我有一个全局函数重载operator +
:从在C++
class Box {
public:
Box (int, int);
Box (const Box&);
~Box();
int get_width() const;
int get_length() const;
private:
int width;
int length;
};
Box operator+(const Box& a, const Box& b) {
int w, l;
w = a.get_width() + b.get_width();
l = a.get_length() + b.get_length();
return Box(w, l);
}
在功能operation+
,我已经返回Box
类的一个对象,如该对象没有通过运算符new
实例化,该对象被分配在堆栈上,不是吗?
int main (int argc, char *argv[]) {
Box a(100, 200);
Box b(101, 202);
Box c = a + b;
cout << "width: " << c.get_width() << "; length: " << c.get_length() << endl;
return 0;
}
在我main
功能,我试图添加2盒a + b
,并打印盒c
的大小。事实证明,对象c
已经存在,这意味着它在执行函数operator+
后不会从堆栈中移除。或者,对象c
实际上分配在堆中?
我很困惑,任何人都可以向我解释这个吗?
感谢您的帮助好奇,正如您所看到的,我还为我的班级“Box”声明了一个复制构造函数,并在构造函数中打印了一些内容。但是当我运行该程序时,由于没有打印任何内容,因此不会调用复制构造函数。这也是优化的结果吗? – vesontio
是的!尝试使用-fno-elide构造函数进行编译。在C++ 17中,这将不会有所作为 – Curious
是的!我试过了'-fno-elide-constructors'选项,现在程序确实调用了copy-constructor。再次感谢你! – vesontio