C ++重载运算符<<为什么&需要?

c++ overloading operator << why & needed?

ostream& operator<<(ostream& cout, const Complex& num) {
    std::cout << num.a << "+i" << num.b;
    return std::cout;
}

当我重载 << 运算符时,为什么我必须在 ostream 旁边编码 &?

因为

对于 return 类型:

  • ostream 对象不可复制,因此除非您执行 move 操作,否则它们不能用作 return 类型。

参数:

  • ostream 对象不可复制,因此除非执行 move 操作,否则它们不能用作参数类型。
  • 预计operator <<可能会改变参数的状态,所以我们应该通过引用传递。

考虑到参数的第二个原则,您的代码应该更正为:

ostream& operator<<(ostream& cout, const Complex& num) {
    cout << num.a << "+i" << num.b;
    return cout;
}