You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C++中对流的读写操作进行错误检查?

C++中判断std::cout输出操作是否成功的方法

C++标准库的IO流不通过返回值直接反馈操作结果,而是通过流状态标志来标识操作是否成功,以下是几种实用的判断方式:

1. 直接检查流对象的布尔状态

流对象在布尔上下文会自动转换为bool值:流状态正常时为true,出现输出失败等错误时为false。示例代码:

#include <iostream>
#include <cstdlib>

int main() {
    std::cout << "Hello world!" << std::endl;
    if (!std::cout) {
        abort();
    }
    return 0;
}

2. 使用流的状态检查方法

可以通过流对象的成员函数更精细地判断错误类型:

  • fail():返回true表示发生可恢复错误(如输出失败、格式错误)
  • bad():返回true表示发生严重底层错误(如设备损坏)

示例:

#include <iostream>
#include <cstdlib>

int main() {
    std::cout << "Hello world!" << std::endl;
    if (std::cout.fail()) {
        abort();
    }
    // 如需检查严重错误
    if (std::cout.bad()) {
        abort();
    }
    return 0;
}

3. 链式输出时直接嵌入检查

因为<<运算符会返回流对象本身,所以可以把检查和输出写在同一行:

#include <iostream>
#include <cstdlib>

int main() {
    if (!(std::cout << "Hello world!" << std::endl)) {
        abort();
    }
    return 0;
}

可选:启用异常抛出

默认情况下流不会抛出异常,若希望出错时自动抛出异常,可通过exceptions()方法设置:

#include <iostream>
#include <stdexcept>
#include <cstdlib>

int main() {
    try {
        std::cout.exceptions(std::ios::failbit | std::ios::badbit);
        std::cout << "Hello world!" << std::endl;
    } catch (const std::ios_base::failure& e) {
        // 处理异常
        abort();
    }
    return 0;
}

内容的提问来源于stack exchange,提问作者CPlus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 03:22:40