17 c++ file-io getline istream ifstream
该istream::getline方法返回什么?
我问,因为我已经看到循环文件,它应该这样做:
while ( file.getline( char*, int ) )
{
// handle input
}
Run Code Online (Sandbox Code Playgroud)
什么回来了?
Mar*_*ork 19
它返回一个流,以便我们可以链接操作.
但是当您在布尔上下文中使用对象时,编译器会查找转换运算符,该运算符可以将其转换为可以在布尔上下文中使用的类型.
在这种情况下,流有explicit operator bool() const.由于这会产生指针,因此可以在布尔上下文中使用.调用时,它会检查错误标志.如果设置了failbit或badbit,那么它返回NULL,这相当于FALSE,否则它返回一个指向self的指针(或者其他有效的东西虽然你不应该使用这个事实)).
因此,您可以在任何需要布尔测试的上下文中使用流:
if (stream >> x)
{
}
while(stream)
{
/* do Stuff */
}
Run Code Online (Sandbox Code Playgroud)
注意:在外部测试流然后在条件/循环语句的主体内读/写它是个坏主意.这是因为阅读行为可能会使流不畅.通常最好将读取作为测试的一部分.
while(std::getline(steam, line))
{
// The read worked and line is valid.
}
Run Code Online (Sandbox Code Playgroud)
它返回流本身。流可以转换(通过void*)来bool指示其状态。在此示例中,当流的转换变为“false”时(当流进入错误状态时会发生这种情况),while循环将终止。bool在您的代码中,当尝试读取文件末尾之后的内容时,最有可能发生这种情况。简而言之,它会读取尽可能多的内容,然后停止。
| 归档时间: |
|
| 查看次数: |
23210 次 |
| 最近记录: |