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

问题描述 投票:0回答:1

未指定对ostream operator<<的调用是否会失败或引发任何异常,而我从未遇到过此异常。

  1. ostream operator<<是否可能失败?
  2. 如果否,为什么标准不将noexcept说明符赋予这些重载?
  3. 以下重载有效吗?好的做法?常用?
  4. 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;
};
c++ operator-overloading iostream noexcept
1个回答
3
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.