std::basic_ios<CharT,Traits>::good

来自cppreference.com
< cpp‎ | io‎ | basic ios
 
 
 
 
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