我见过很多这样的循环来读取流:
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
。