代码如下:
#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() - &gt; sbumpc()或is.rdbuf() - &gt; sgetc()返回 traits :: eof(),函数调用setstate(failbit | eofbit)(其中 可能会抛出ios_base :: failure)。
所以fail()
应为true,tellg
应返回-1。
答案 0 :(得分:1)
来自std::istream::tellg
的参考:
如果成员
fail
返回true,则函数返回-1。
来自std::ios::fail
的参考:
检查
failbit
或badbit
是否已设置如果为流设置了failbit或badbit错误状态标志中的任何一个(或两者),则返回true。
在a期间发生错误时,至少设置其中一个标志 输入操作。
检查此代码:
#include <iostream>
#include <sstream>
using namespace std;
int main() {
istringstream iss("a");
iss.get();
cout << iss.fail() << endl; // 0
cout << iss.tellg() << endl; // 1
cout << iss.eof() << endl; // 0
}