【发布时间】:2018-03-08 23:10:56
【问题描述】:
以下代码:
#include <iostream>
#include <sstream>
using namespace std;
int main() {
istringstream iss("a");
iss.get();
cout << iss.tellg() << endl; // 1
cout << iss.fail() << endl; // 0
}
我希望结果是 -1,1 而不是 1, 0。
tellg 将首先构造一个sentry,然后检查fail()。
根据http://eel.is/c++draft/istream::sentry#2
如果 is.rdbuf()->sbumpc() 或 is.rdbuf()->sgetc() 返回 traits::eof(),函数调用 setstate(failbit | eofbit)(其中 可能会抛出 ios_base::failure)。
所以fail() 应该为真,tellg 应该返回 -1。
【问题讨论】:
-
在我要求流读取一个字符并且它读取一个字符之后,
fail()会返回 true,这对我来说似乎很奇怪。 -
您也可以/应该检查
get的返回值。