Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;运算符重载返回_C++ - Fatal编程技术网

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。请注意,这是一个复制省略上下文“复制”或“移动”或“构建在堆栈的其他位置,因为已知变量将被返回”。谢谢大家:)我理解:)