“virtual const char* ro_err::StdErr::what() const”的更宽松的抛出说明符

2024-01-10

这是我的完整代码 https://gist.github.com/bd44e03153a499a0de62,我自定义异常,例如:

class StdErr : public std::exception {

public:
    str msg;

    StdErr(str msg) { this->msg = msg; };

    virtual const char *what() const override {
        return this->msg.c_str();
    };
};

并像这样继承它:

class ShErr : public StdErr {

public:
    ShErr(str m) : StdErr(m) { }
};

并像这样使用它们:

int main(int argc, char **argv) {
    throw ro_err::ShErr("sh err");
    return (0);
};

它提高了looser throw specifier for ‘virtual const char* ro_err::StdErr::what() const’,我有以下问题:

  • 什么是更宽松?
  • 什么是说明符?
  • 如何修复它

从c++11开始what() is noexcept。您尚未将其声明为noexcept。这就是“宽松的投掷说明符”告诉您的。看http://en.cppreference.com/w/cpp/error/exception/what http://en.cppreference.com/w/cpp/error/exception/what.

IE。声明它就像

virtual const char *what() const noexcept override
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

“virtual const char* ro_err::StdErr::what() const”的更宽松的抛出说明符 的相关文章

随机推荐