【问题标题】:How does while (std::cin >> value) work?while (std::cin >> value) 是如何工作的?
【发布时间】:2015-11-12 15:03:24
【问题描述】:

在 C++ Primer 中给出的示例中,

#include <iostream>
using namespace std;

int main() {
    int sum = 0, value = 0;  
    while (std::cin >> value) {       
        sum += value; // equivalent to sum = sum + value
    }    
    std::cout << "Sum is: " << sum << std::endl;    
    return 0; 

}

(std::cin >> value) 如何返回 true?什么是“文件结尾”?看来我必须理解该术语才能理解我的主要问题。

谢谢!

【问题讨论】:

  • 文件结束?这意味着......文件的结尾。你已经走到了尽头。终点站,虽然不能通过的地方,这里没有什么可看的。
  • @MarcB,有趣的是还有更多内容:) 在 Windows 世界中有两种不同的东西代表文件结束(至少 15 年前有)
  • 类似问题的答案,只有cout,也应该有助于解释:Do while loop with a cout statement

标签: c++


【解决方案1】:

overloaded operator&gt;&gt; function 返回对流本身的引用,并且流具有an overloaded operator,允许在布尔条件下使用它来查看最后一个操作是否正常。 “okay or not”的一部分包括到达文件末尾或其他错误。

【讨论】:

  • 虽然 100% 正确,但不确定 OP 是否知道“重载运算符函数”的含义。
  • 对不起。我不知道“重载运算符函数”是什么意思。
  • @Superex Stream 类没有任何“天生”的能力来使用移位运算符&gt;&gt;&lt;&lt;,而是使用自己的函数重载这些运算符.如果您不了解重载(在 C++ 中非常重要的一个概念),那么我建议您从The Definitive C++ Book Guide and List 挑选一本初学者书籍或教程。
  • 感谢您告诉我我错过了 C++ 中的一个重要概念。顺便说一句,我找不到合适的《编程:使用 C++ 的原则和实践》的可下载版本,而且我买不起这本书。所以我选择了 C++ Primer。我进展得非常缓慢,我会发疯去理解我不理解的东西。我在 Python 和 Javascript 方面有一些经验。再次感谢!
  • 什么是“文件结尾”?输入如何同时存在但又不存在?
【解决方案2】:

C++ 翻译这一行

while (std::cin >> value)

类似

inline bool f(int v) {
  auto& i = std::cin >> v;
  return i.operator bool();
}

while( f(v) ) {

为什么翻译成布尔值? 因为while需要一个布尔表达式,所以编译器搜索std::cin &gt;&gt; v返回的布尔转换运算符。

什么是布尔转换运算符? 布尔转换运算符将对象转换为布尔值。如果代码的某些部分期望某种类型作为布尔值(如强制转换)工作,则使用此运算符。

什么是运算符? 是覆盖某些操作表达式(+、-、强制转换、-> 等)行为的函数或方法

【讨论】:

    猜你喜欢
    • 2019-02-12
    • 1970-01-01
    • 2013-11-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-19
    • 2010-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多