- 论坛徽章:
- 1
|
- #include <iostream>;
- using namespace std;
- int main()
- {
- cout.clear(ios_base::eofbit);
- //or:
- //cout.setstate(cin.failbit);
- if(cout)
- cout << "ok" << endl;
- else cout << "fail" << endl;
- system("PAUSE");
- }
复制代码
1>为什么io流的位状态是静态定义在ios_base中呢?
我觉得如果istream对象位状态损坏了不会影响ostream对象正常工作呀
反之也是一样.但这样的话cin我让它失败导致cout也无法工作了.这两个类应该不要去关联起来吧?
2>上面的cout.clear(ios_base::eofbit);也会导致cout失败,为什么呢?
我看istream继承的operator void *()是这样定义的:
- operator void*() const
- { return this->;fail() ? 0 : const_cast<basic_ios*>;(this); }
复制代码
而fail()成功时只会是发生badbit,failbit被设置的情况下呀.在eofbit被设置时不会影响它吧?能解释一下吗? |
|