如何解决为什么即使 std::getline 不返回布尔值,while(std::getline) 循环也能工作?
我见过很多这样的循环来读取流:
while(std::getline(iss,temp,' ')) {
...
}
但我一直不明白它为什么有效。在 documentation for std::getline 中,它说它返回流,我不明白它是如何转换为 bool 值的。它是在读取 eof 标志还是什么?如果是这样,这会不会更准确:
while(!iss.eof()) {
std::getline(iss,' ');
}
解决方法
while
语句不需要专门用于其条件表达式的 bool
。它们需要一种可转换为 bool 的类型。
std::getline
返回派生自 a type 的 std::basic_ios
,即 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,' '))) {
...
}
并且转换成功执行
while(std::getline(iss,' ').operator bool()) {
...
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。