#include <iostream>
int main()
{
int sum = 0, value = 0;
// read until end-of-file, calculating a running total of all values read
while (std::cin >> value)
sum += value; // equivalent to sum = sum + value
std::cout << "Sum is: " << sum << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我研究了 while 循环用于在满足条件时循环给定代码,但我在这里没有看到条件......我看到的唯一参数是 cin 要求值,但我不认为那是条件
该表达式std::cin >> value返回一个值(对流的引用std::cin)。true如果读取成功,false则该值被隐式转换为,如果读取失败则为。该函数std::basic_ios<CharT,Traits>::operator bool用于隐式转换。
我认为 cppreference 可以比我更好地描述它:
std::basic_ios<CharT,Traits>::operator boolC++ 输入/输出库 std::basic_ios
operator void*() const;(1)(直到 C++11)
explicit operator bool() const;(2)(C++11 起)检查流是否没有错误。
- 如果
fail()返回true,则返回空指针,否则返回非空指针。此指针可隐式转换为bool布尔上下文并可在布尔上下文中使用。- 返回
true如果流没有错误并准备进行I / O操作。具体来说,返回!fail().这个操作符使得使用流和函数返回对流的引用作为循环条件成为可能,从而产生惯用的 C++ 输入循环,例如
while(stream >> value) {...}orwhile(getline(stream, string)){...}。此类循环仅在输入操作成功时才执行循环体。