什么是istream::getline
方法返回?
我这样问是因为我已经看到要循环遍历文件,应该这样做:
while ( file.getline( char*, int ) )
{
// handle input
}
被退回的是什么?
它返回一个流,以便我们可以链接操作。
但是,当您在布尔上下文中使用对象时,编译器会查找可以将其转换为可在布尔上下文中使用的类型的转换运算符。
C++11
在这种情况下,流有explicit operator bool() const http://en.cppreference.com/w/cpp/io/basic_ios/operator_bool。调用时它会检查错误标志。如果设置了failbit 或badbit,则返回false,否则返回true。
C++03
在这种情况下,流有operator void*() const http://en.cppreference.com/w/cpp/io/basic_ios/operator_bool。由于这会产生一个指针,因此可以在布尔上下文中使用它。调用时它会检查错误标志。如果设置了failbit或badbit,那么它返回NULL,这相当于FALSE,否则它返回一个指向self的指针(或者其他有效的东西,尽管你不应该使用这个事实))。
Usage
因此,您可以在任何需要布尔测试的上下文中使用流:
if (stream >> x)
{
}
while(stream)
{
/* do Stuff */
}
注意:在外部测试流然后在条件/循环语句的主体内对其进行读/写是个坏主意。这是因为读取行为可能会使流变差。通常最好将阅读作为测试的一部分进行。
while(std::getline(stream, line))
{
// The read worked and line is valid.
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)