微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决为什么即使 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 typestd::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 举报,一经查实,本站将立刻删除。