【问题标题】:Appending a string when throwing an error in C++在 C++ 中引发错误时附加字符串
【发布时间】:2014-03-04 06:36:25
【问题描述】:

我确信这很简单,但找不到任何其他明确说明这一点的帖子,尽管我确信一定有一个埋在某个地方。

在 C++ 中,当以以下方式使用 try catch 块时,如何将字符串变量附加到错误消息中?

尝试执行此操作时出现未处理的异常。这与传回的类型有关吗?似乎是返回一个字符串而不是一个 char*。如果这是正确的,那会导致问题吗?我将如何调整?我尝试添加一个额外的 catch (const string my_msg),但这也不起作用。

string msg = "message";
try{
    if (...)
        throw "My error " + msg;
    }
catch (const char* my_msg){
    cerr << my_msg << endl;
}

【问题讨论】:

    标签: c++ string exception try-catch multi-catch


    【解决方案1】:

    "My error " + msg 是一个 operation that concatenates 一个 const char* 字符串和一个 std::string。此操作会生成 std::string 类型的临时变量。因此,必须使用 std::string 类型的 catch 子句捕获抛出的变量。

    catch (const std::string& my_msg){
        cerr << my_msg << endl;
    }
    

    不过,最好让您的异常源自std::exception。不过,您不需要创建自己的异常类,因为有 std::runtime_error 及其派生类,它们提供了常见运行时异常的有用分类。

    在许多情况下,您需要为异常设置不同的类型,其中通常可能是特定于项目或领域的。在 C++11 中,创建自己的异常类型就这么简单

    struct my_exception : std::runtime_exception {
        using std::runtime_exception::runtime_exception;   // Inherit runtime_exception's constructors
    };
    

    这使用了 C++11 的 inheriting constructors

    【讨论】:

      猜你喜欢
      • 2014-09-30
      • 2018-09-26
      • 2014-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      • 2015-02-13
      • 2011-12-16
      相关资源
      最近更新 更多