C++ IOS::exceptions() 函数



C++ 的std::ios::exceptions()函数用于管理输入/输出流对象的状体标志,并确定这些标志中的哪些将触发异常。通过调用此函数,可以将流设置为针对特定错误状态(如 failbit、badbit 或 EOF)抛出异常。

此掩码是成员类型 iostate 的一个对象,它是由以下任何组合形成的值 -

(成员常量)

指示 用于检查状态标志的函数
good() eof() fail() bad() rdstate()
goodbit无错误(零值 iostate true false false false goodbit
eofbit输入操作到达文件末尾 false true false false eofbit
failbitI/O 操作中的逻辑错误 false false true false failbit
badbitI/O 操作中的读/写错误 false false true true badbit

语法

以下是 std::ios::exceptions() 函数的语法。

iostate exceptions() const;
void exceptions (iostate except);

参数

  • except - 由要设置的错误状态标志位组合形成的成员类型 iostate 的位掩码值。

返回值

它返回成员类型 iostate 的一个位掩码,表示调用此成员函数之前存在的异常掩码。

异常

如果抛出异常,则流处于有效状态。

数据竞争

访问或修改流对象。

对同一流对象的并发访问可能会导致数据竞争。

示例

在以下示例中,我们将考虑 exceptions() 函数的基本用法。

#include <iostream>
#include <sstream>
int main()
{
    std::istringstream a("11 CIAZ");
    int x;
    try {
        a.exceptions(std::ios::failbit);
        a >> x;
        std::cout << "Number read: " << x << std::endl;
        a >> x;
    } catch (const std::ios_base::failure& e) {
        std::cerr << " " << e.what() << std::endl;
    }
    return 0;
}

输出

以上代码的输出如下:

Number read: 11
basic_ios::clear: iostream error

示例

考虑以下示例,我们将手动设置 badbit 以模拟错误的写入操作。

#include <iostream>
#include <sstream>
int main()
{
    std::ostringstream a;
    a.exceptions(std::ostringstream::badbit);
    try {
        a << "TutorialsPoint, TP!";
        a.setstate(std::ios_base::badbit);
        a << "Welcome";
    } catch (const std::ios_base::failure& e) {
        std::cerr << " " << e.what() << '\n';
    }
    return 0;
}

输出

以下是以上代码的输出:

basic_ios::clear: iostream error
ios.htm
广告