为什么 while(std::getline) 循环即使 std::getline 不返回布尔值也能正常工作?



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

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

但我一直不明白为什么它有效。在std::getline的文档中,它说它返回流,我不明白这是如何转换为bool值的。是在读eof旗还是什么?如果是这样,这不是更准确吗:

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

std::getline继承std::basic_istream,后者继承std::basic_ios,后者实现std::basic_ios<CharT,特征>:操作员bool。

while需要布尔结果表达式,因此

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

由编译器在后台尝试,就像一样

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

并且转换作为成功执行

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

while语句的条件表达式不需要bool。它们需要一个可转换为bool的类型。

std::getline返回从std::basic_ios派生的类型,该类型可转换为bool

最新更新