【问题标题】:Should you format operator<< for classes?您应该为类格式化 operator<< 吗?
【发布时间】:2025-12-27 13:45:11
【问题描述】:

如中,操作符>>应该匹配操作符

数据库示例:

如果操作符>>读入以下格式:

2
Joe 500 20 1
Bob 250 30 0

运营商应该

Record: 1/2
Name: Joe
Balance: 500
Transactions: 20
Premium Account: Yes

然后有一个单独的writeFile()函数?

我知道任何一个都可以,但是“公认的标准”是什么?

【问题讨论】:

    标签: c++ class operators standards


    【解决方案1】:

    如果你有一个 istream operator&gt;&gt; 重载用于以特定格式读取数据的类型,那么如果你为相同类型实现一个 ostream operator&lt;&lt; 重载,它应该以相同的格式输出(否则,它可能变得相当混乱)。

    【讨论】:

      【解决方案2】:

      这种运算符重载是 IMO 的一大误用和误解。 在真正有意义的地方使用重载。

      出于调试目的,使用 toString() 并覆盖 >。

      &gt;&gt;&lt;&lt; 通常用于将序列化数据发送到流,而不是用于与用户通信。

      我的 2 欧分。

      【讨论】:

      • 我不同意:如果您打算从流中读取或写入数据,那么重载“流运算符”既简单又惯用。
      • 你是对的 - 当你写这篇文章时,我正在将它添加到我的答案中:)
      【解决方案3】:

      两者或相互独立,根据您的意愿,您可以超载它们。

      【讨论】:

      • 我认为 OP 知道这一点。他在问这样做是否是个好主意。例如,你可以重载 && 但一般来说你应该避免这样做。
      • @Billy 是的,你是对的。但是覆盖