【问题标题】:Construct Exception from String C++从字符串 C++ 构造异常
【发布时间】:2020-07-30 18:02:10
【问题描述】:

如何从 C++ 中的字符串构造异常? -std::exception 构造函数接受一个 char 数组。 - 如果我插入string.c_str(),那么它不会读取整个数组,而只会读取第一个字符。

【问题讨论】:

  • std::exception 没有一个构造函数,它接受一个 char 数组(或者其他任何东西,就此而言,除了另一个 std::exception 来复制)。从std::exception派生的类有自己的构造函数,可以采用std::stringconst char*

标签: c++ exception


【解决方案1】:

std::runtime_error 可从 std::string 构造,其他标准派生异常类型也是如此。

使用它,将正确管理字符串的生命周期(与您的尝试不同,这几乎肯定涉及取消引用悬空指针)。

std::runtime_error 还将安全地实现复制语义 (ref),如果您陷入必须自己这样做的情况,很容易忘记这一点。

你应该派生自std::exception,而不是直接使用它。

【讨论】:

    【解决方案2】:

    它不会起作用,因为 string.c_str() 返回一个 char 静态内存数组,尝试声明 char 指针并为其分配一些字符并使用它

    【讨论】:

    • std::string::c_str()返回的char数组不是静态的。
    猜你喜欢
    • 1970-01-01
    • 2015-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-11
    • 1970-01-01
    相关资源
    最近更新 更多