C++ C++;运算符重载返回
在此代码中:C++ C++;运算符重载返回,c++,C++,在此代码中: RationalNum operator+(const RationalNum& left, const RationalNum& right) { RationalNum temp; /*code here*/ return temp; } 如果此函数退出时对象从堆栈中“删除”,它如何返回RationalNum对象?这是因为在销毁局部变量之前复制了返回值(如有必要)。销毁返回的对象是调用函数的职责 返回的对象在return语句的点处构造,
RationalNum operator+(const RationalNum& left, const RationalNum& right) {
RationalNum temp;
/*code here*/
return temp;
}
如果此函数退出时对象从堆栈中“删除”,它如何返回RationalNum对象?这是因为在销毁局部变量之前复制了返回值(如有必要)。销毁返回的对象是调用函数的职责
返回的对象在return语句的点处构造,但局部变量的销毁将保留到块的末尾(返回之后)。确保您的
RationalNum
类遵循3/5/0规则。@FredyR4zox,对象不是堆栈中的delete
d,但是当它们超出范围时会被破坏?无法再现如果对象被“删除”,它如何返回一个RationalNum对象——就像int foo(){int i=10;return i;}
返回10
,即使“i”被“删除”。因为这是一个按值返回,所以这里没有问题。事实上,在函数的堆栈框架中,很可能永远不会实际创建temp
。如果您正在返回指针或引用,您将陷入深度doo doo。请注意,这是一个复制省略上下文“复制”或“移动”或“构建在堆栈的其他位置,因为已知变量将被返回”。谢谢大家:)我理解:)