c++ - (cin >> buf && !buf.empty()) 中的第二个条件是否多余?

标签 c++ cin

<分区>

我正在阅读 C++ 入门书,并对以下代码示例感到好奇:

string buf;
while (cin >> buf && !buf.empty()) {
    if (buf[0] != '_')
       continue; // get another input
       //the input starts with an underscore; process buf . . .
}

循环应该忽略不以下划线开头的单词并处理以下划线开头的单词。

我的问题是关于条件

(cin >> buf && !buf.empty())

我会说当 (cin >> buf) 为真时,条件 (!buf.empty()) 始终为真,所以我不明白添加它的意义。 有没有第二个条件不是多余的情况?

之前有一个关于堆栈溢出的问题,关于类似的构造 ( Is it possible to read an empty string from cin and still get true from cin.good()? ),其答案是否定的(第二个条件多余的)。

如果这是正确的,为什么会出现在书上?这只是一个错误? 或者有一些特殊情况,双重条件是否有意义?

最佳答案

需要说明的是,operator bool() 是 badbit || failbit,当“输入操作未能读取预期的字符或任何其他类型的操作未能产生所需的结果”时设置 failbit(Langer,Kreft 1999)

string buf;
while ((cin >> buf,cin.operator bool()) && !buf.empty()) {
    if (buf[0] != '_')
       continue; // get another input
       //the input starts with an underscore; process buf . . .
}

关于c++ - (cin >> buf && !buf.empty()) 中的第二个条件是否多余?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31682948/

相关文章:

c# - 获取手指在触摸板上的位置

c++ - 在 C++ 兼容性更改后,G++ 生成的二进制文件比 GCC 小,但比之前的二进制文件稍大?

java - 高效的模 3 运算?

c++ - 在这种情况下如何防止 C++ 输出/控制台表单关闭

c++ - "single assignment"与 "no early return"

c++ - 我如何在不知道将输入多少的情况下使用 C++ 在一行中获取多个整数?

c++ - 如果输入是一个字符然后在 C++ 中存储在一个整数中,为什么 cin 会得到奇怪的值?

c++ - 如何使 cin >> 不将 float 转换为整数?

C++:只读取多个输入到行尾

c++ - 当 cin 的输入是 'dot' 时 while 循环到无穷大