如何在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
相关产品推荐
相关产品推荐

