c++ - if(!(is >> s)) 是什么意思?

标签 c++ operator-overloading iostream

这是一个重载的>>运算符函数:

std::istream& operator>>(std::istream& is, std::vector<int>& v){
  string s;
  if (! (is >> s) )
    return is;
   ...
  return is;
}

据我了解, if(! (is >> s)) 没有任何意义,因为终端或控制台将等待键盘或其他来源的输入进入 s。因此 if() 中条件的值最终将是 false。谁能帮忙?

最佳答案

is >> s 尝试从流 is 中读取字符串 s

istreams operator>>() 返回对 is 的引用。

istreams operator!() 测试流是否处于无效状态。具体来说,如果已设置流的 badbit 或 failurebit,则返回 true

所以,

 if (! (is >> s) )
     return is;

功能上等同于

 is >> s;
 if (is.fail()) return is;    // is.fail() returns true if failbit or badbit are set

这意味着如果从流中读取字符串失败,该函数会立即返回。请注意,这与到达流末尾不同。

关于c++ - if(!(is >> s)) 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47366378/

相关文章:

c++ - 通过基类指针访问子类的成员函数

c++ - 递归函数返回

c++ - 在类中使用自定义 new() 运算符时,谁为 shared_ptr 的控制 block 分配内存

c++ - 重载 operator() 的左值解释

C++ Matrix模板,矩阵矩阵和矩阵数字乘法之间的歧义

c++ - 如何覆盖 C++ 标准库类函数?

python - 从哪里获取适用于 Visual Studio 的 Python DLL?

c++ - 在模板类中找不到错误

c++ - stringstream(或 boost)是否有一些智能格式功能?

C++ Boost io 流,错误处理