c++ - operator<< 函数的返回值

标签 c++

我知道我应该从“operator<<”返回“ostream&”以便能够像这样“链接”运算符(operator)

cout<<a<<b<<c;

但是,在下面的代码中,我没有返回“ostream&”并且链接仍然是可能的。为什么?

#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]

最佳答案

从非 void 函数的末尾掉落是未定义的行为。一种可能的未定义行为正在按您预期的方式工作,即返回到位。

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

关于c++ - operator<< 函数的返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17953576/

相关文章:

c++ - 包含类文件后的错误消息(多个定义的符号)

c++ - C++中函数内的静态变量 - 即使函数不运行也分配?

c++ - 与 MySQL 服务器通信的最佳方式是什么?

c++ - Clang 真的有这么聪明吗?

c++ - 为什么 ValGrind 找不到我的符号?

c++ - decltype 和括号

具有模板和可见性的 c++ 继承

通过引用存储的c++变体类成员

c++ - 在 C++ 中,如何将 ASCII 艺术打印到控制台?

c++ - 枚举模板