std::basic_ios<CharT,Traits>::good
来自cppreference.com
<tbody>
</tbody>
bool good() const; |
||
若流上的最近 I/O 操作成功完成则返回 true。明确说即返回 rdstate() == 0 的结果。
设置流状态位的条件列表,见 ios_base::iostate。
参数
(无)
返回值
若流未出现错误则为 true,否则为 false。
示例
运行此代码
#include <cstdlib>
#include <fstream>
#include <iostream>
int main()
{
const char* fname = "/tmp/test.txt";
std::ofstream ofile{fname};
ofile << "10 " << "11 " << "12 " << "non-int";
ofile.close();
std::ifstream file{fname};
if (!file.good())
{
std::cout << "#1. 打开文件 test.txt 失败 - "
"错误标记之一为 true\n";
return EXIT_FAILURE;
}
// 典型的 C++ I/O 循环使用 I/O 函数的返回值为循环控制条件,此处使用 operator bool()
for (int n; file >> n;)
std::cout << n << ' ';
std::cout << '\n';
if (file.bad())
{
std::cout << "#2. 读取时发生 I/O 错误 - badbit 为 true\n";
return EXIT_FAILURE;
}
else if (file.eof())
std::cout << "#3. 成功抵达文件末尾 - eofbit 为 true\n"
"这没问题,即便 file.good() 为 false\n";
else if (file.fail())
std::cout << "#4. 遇到非整数数据 - failbit 为 true\n";
}
可能的输出:
10 11 12
#4. 遇到非整数数据 - failbit 为 true
参阅
下表显示 basic_ios 访问器(good()、fail() 等)对于 ios_base::iostate 标志的所有可能组合的值:
| ios_base::iostate 标志 | basic_ios 访问器
| |||||||
eofbit
|
failbit
|
badbit
|
good() | fail() | bad() | eof() | operator bool | operator! |
| false | false | false | true | false | false | false | true | false |
| false | false | true | false | true | true | false | false | true |
| false | true | false | false | true | false | false | false | true |
| false | true | true | false | true | true | false | false | true |
| true | false | false | false | false | false | true | true | false |
| true | false | true | false | true | true | true | false | true |
| true | true | false | false | true | false | true | false | true |
| true | true | true | false | true | true | true | false | true |