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 访问器
eofbitfailbitbadbitgood()fail()bad()eof()operator booloperator!
falsefalsefalsetruefalsefalsefalsetruefalse
falsefalsetruefalsetruetruefalsefalsetrue
falsetruefalsefalsetruefalsefalsefalsetrue
falsetruetruefalsetruetruefalsefalsetrue
truefalsefalsefalsefalsefalsetruetruefalse
truefalsetruefalsetruetruetruefalsetrue
truetruefalsefalsetruefalsetruefalsetrue
truetruetruefalsetruetruetruefalsetrue