我正在读一本书,"软件 - 使用C ++的原则和实践"作者:Bjarne Stroustrup ,并提供了此代码:
Token get_token();
vector<Token>tok;
int main()
{
while(cin)
{
Token t = get_token();
tok.push_back(t);
}
}
什么时候检查?
答案 0 :(得分:4)
while
将其条件表达式结果转换为bool
。据此,在iostreams的情况下,它调用std::ios::operator bool:
返回是否设置了错误标志(
failbit
或badbit
)。请注意,此函数与成员
good
不同,但与成员fail
相反。
模型示例显示设置了哪些位以及何时:
#include <iostream>
#include <iomanip>
void foo(std::istream& in, std::ostream& out) {
std::string str;
out << "goodbit | eofbit | failbit | badbit | string" << std::endl;
while(true) {
in >> str;
auto s = in.rdstate();
out
<< std::setw(7) << bool(s & std::ios::goodbit) << " | "
<< std::setw(6) << bool(s & std::ios::eofbit) << " | "
<< std::setw(7) << bool(s & std::ios::failbit) << " | "
<< std::setw(6) << bool(s & std::ios::badbit) << " | ";
if(in) {
out << str << std::endl;
}
else {
out << std::endl;
break;
}
}
}
int main(void) {
foo(std::cin, std::cout);
return 0;
}
$ echo "a ab" | ./untitled
(输入管道)打印
goodbit | eofbit | failbit | badbit | string
0 | 0 | 0 | 0 | a
0 | 0 | 0 | 0 | ab
0 | 1 | 1 | 0 |