为什么 while(std::getline) 循环可以工作,即使 std::getline 不是 return 布尔值?

Why do while(std::getline) loops work even though std::getline doesn't return a bool?

我见过很多这样的循环来读取流:

while(std::getline(iss, temp, ' ')) {
    ...
}

但我一直不明白它为什么起作用。在 documentation for std::getline 中,它表示它是 returns 流,我不明白它是如何转换成布尔值的。它是在读取 eof 标志还是什么?如果是这样,这不是更准确吗:

while(!iss.eof()) {
    std::getline(iss, temp, ' ');
}

while 语句不需要专门用于其条件表达式的 bool。他们需要一个 可转换为 bool.

的类型

std::getline returns a type derived from std::basic_ios, which is convertible to bool.

std::getline继承std::basic_istream,继承std::basic_ios,实现std::basic_ios<CharT,Traits>::operator bool

while 需要一个 bool 结果表达式,因此

while(std::getline(iss, temp, ' ')) {
    ...
}

由编译器在后台尝试,如

while(static_cast<bool>(std::getline(iss, temp, ' '))) {
    ...
}

并且转换成功执行为

while(std::getline(iss, temp, ' ').operator bool()) {
    ...
}