Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.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++ - Fatal编程技术网

C++ 运算符的返回值<&书信电报;功能

C++ 运算符的返回值<&书信电报;功能,c++,C++,我知道我应该从“操作符”返回“ostream&”,从非void函数的末尾掉下来是未定义的行为。一种可能的未定义行为是按照您预期的方式工作,即返回到位 g++提供了一个方便的警告,以防止这种情况发生在您身上。正如其他人所指出的,您调用了未定义的行为:任何事情都可能发生。如果您运气好,就会发生崩溃。看起来您运气不好 如果你对它为什么发生在这个例子中感兴趣,你应该看看生成的程序集。我的袖口猜测是一个指针,指向“代码> LHS ,它登记在你的平台上返回值。因为C++中的引用通常是用指针来实现的,这将和回

我知道我应该从“操作符”返回“ostream&”,从非void函数的末尾掉下来是未定义的行为。一种可能的未定义行为是按照您预期的方式工作,即返回到位


g++提供了一个方便的警告,以防止这种情况发生在您身上。

正如其他人所指出的,您调用了未定义的行为:任何事情都可能发生。如果您运气好,就会发生崩溃。看起来您运气不好

如果你对它为什么发生在这个例子中感兴趣,你应该看看生成的程序集。我的袖口猜测是一个指针,指向“代码> LHS ,它登记在你的平台上返回值。因为C++中的引用通常是用指针来实现的,这将和回溯一样。ng参考至

lhs

但这是一个完全的暗中操作,最终不是很有趣或重要。只需倾听编译器的警告,不要这样做。

这是“纯粹的运气”。函数的返回值位于特定寄存器中。因为现有代码已经调用了
运算符
cout<<a<<b<<c;
#include <iostream>
using namespace std;

class CComplexNumber{
    float m_realPart;
    float m_imagPart;
public:
    CComplexNumber(float r,float i):m_realPart(r),m_imagPart(i){}

    friend ostream& operator<<(ostream& lhs,CComplexNumber rhs){
        lhs<<"["<<rhs.m_realPart<<","<<rhs.m_imagPart<<"]"<<endl;
        //MISSING RETURN STATEMENT!
    }
};

int main() {
    CComplexNumber a(1,2);
    CComplexNumber b(3,4);
    CComplexNumber c(5,6);

    cout<<a<<b<<c;

    return 0;
}
[1,2]
[3,4]
[5,6]