为什么 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()) {
...
}
我见过很多这样的循环来读取流:
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()) {
...
}