You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++运算符重载代码运行无数据输出,请求排查问题原因

问题分析:mod5类输入输出无数据输出问题

首先看提供的mod5类及输入输出重载代码:

class mod5
{
private:
  unsigned i;

public:
  mod5() : 
    i{} 
  { 
  }

  mod5(mod5 const&) = default;
  mod5& operator=(mod5 const&) = default;

  explicit mod5(unsigned value) :
    i{value}
  {
  }

  unsigned mod_value() const
  {
    return i % 5;
  }

  friend auto operator<=>(mod5 const& lhs, mod5 const& rhs) 
  {
    return lhs.mod_value() <=> rhs.mod_value();
  }
};


std::istream& operator>>(std::istream& is, mod5& m)
{
  unsigned int temp;
  if(is >> temp ){
    m = mod5(temp);
  }
  else{
    is.setstate(std::ios_base::failbit);
  }

  return is;
}

std::ostream& operator<<(std::ostream& os, mod5 const& m)
{
  os << m.mod_value();
  return os;
}

问题排查

编译成功但运行无数据输出,运行结果为:rel_demo: operator==(): rel_demo: operator<(): rel_demo: operator>(): stack(0):,说明无有效数据被导入,进而无内容可输出。

  • operator<<函数无问题:它直接输出mod_value()的结果,只要mod5对象有合法值,就能正确输出对应的模5结果,逻辑完全正确。
  • 问题大概率出在输入环节(operator>>相关):
    1. 输入函数本身的逻辑没有致命错误,但存在冗余操作:当is >> temp失败时,流本身已经处于fail状态,无需再次调用is.setstate(std::ios_base::failbit),不过这个冗余不会导致无数据输出。
    2. 真正的无数据输出原因,更可能是输入时未读取到有效数据:比如输入文件不存在、文件内容不是合法的无符号整数,或者测试代码中没有正确处理输入流状态(比如未检查流是否成功打开),导致没有成功读取任何mod5对象,最终没有内容可输出。

内容的提问来源于stack exchange,提问作者gimon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 15:41:47