c++ - ‘virtual const char* ro_err::StdErr::what() const’ 的宽松 throw 说明符

标签 c++

这是我的 full code ,我自定义异常如下:

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()noexcept。您尚未将其声明为 noexcept。这就是“宽松 throw 说明符”告诉您的内容。参见 http://en.cppreference.com/w/cpp/error/exception/what .

即像这样声明

virtual const char *what() const noexcept override

关于c++ - ‘virtual const char* ro_err::StdErr::what() const’ 的宽松 throw 说明符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35763027/

相关文章:

c++ - boost::fusion::map 允许重复键

c++ - 哪个STL容器?

C++,模板特化问题

c++ - g++ -Wall 不警告 double-> int cast

c++ - 如何在 QApplication 中应用 QLibraryInfo 中加载的库和插件配置?

c++ - g++ 不允许在 lambda 中通过引用对 const 对象进行广义捕获?

c++ - 使用两个函数创建将用随机数填充矩阵的二维整数数组。我做错了什么?

c++ - 服务器在 Openssl 初始化时失败

c++ - 使用带有字符串定界符的 boost::tokenizer

c++ - 哪里需要(不需要)完整类型?