iostream 运算符重载的 C++ 异常规范

标签 c++ operator-overloading iostream noexcept

如果调用 ostream operator<< 则未指定可能会失败或抛出任何异常,我从未遇到过这种情况。

  • 有没有ostream operator<<的情况会失败吗?
  • 如果没有,为什么标准不放noexcept这些重载的说明符?
  • 以下重载有效吗?好的做法?常用?
  • istream operator>> 同样的问题?

  • struct MyClass {
        int data;
        // I/O operators with noexcept specifier
        friend std::istream& operator>>(std::istream &in, MyClass &obj) noexcept;
        friend std::ostream& operator<<(std::ostream &out, const MyClass &obj) noexcept;
    };
    

    最佳答案

    原因没有operator >>operator <<标记为 noexcept是因为 std::basic_ios::exceptions .此成员函数存在于从 std::basic_ios 继承的所有对象中。并允许您配置流以针对某些故障模式抛出异常。如果运算符是 noexcept那么您不能将它们与设置了异常的流一起使用。

    关于iostream 运算符重载的 C++ 异常规范,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58752411/

    相关文章:

    c++ - C++中的内存管理。

    c++ - 如何覆盖运算符<<?

    C++ 使用 operator int() 而不是 operator+

    c++ - 输入不是数字时输出错误。 C++

    关于cout和cin的C++简单代码问题

    c++ - 我可以用指针创建数组变量吗?如何?

    c++ - 在 Visual C++ 中的不同文件和不同命名空间中使用函数

    c++ - 从大写字母转换为小写字母,反之亦然

    c++ - 从文件中读取和显示字符串

    c++ - std::ostream 忽略通过 setf() 在底层设置的十六进制标志