【发布时间】:2020-10-15 19:05:33
【问题描述】:
如何在 C++11 中更正以下代码:
const char *what() const noexcept override {
return "Mtm matrix error: Dimension mismatch: (" + std::to_string(mat1_height) + "," +
std::to_string(mat1_width)
+ ") (" + std::to_string(mat2_height) + "," + std::to_string(mat2_width) + ")";
}
如您所见,我返回的是string 而不是const char*,但这不会自动转换吗?以及如何解决?
注意:我想要一些看起来像 c++ 代码的东西,而不是使用 sprintf 的 c 代码
【问题讨论】:
-
"我返回的是字符串而不是字符串" 不,你返回的是
std::string而不是const char*。 -
@AlgirdasPreidžius 错字,会更正
-
对此有何提示?
-
1) “但不会自动转换吗?”不,为什么会这样?它们是 2 种不同的类型。 2) “对此有任何提示吗?”将
std::string存储在您的异常类中,并返回其中的.c_str ()。注意:试图返回在此方法中构造的std::string中的.c_str (),将调用未定义的行为。 -
一方面你告诉我调用 .c_str () ,另一方面它会调用未定义的行为。这听起来很矛盾
标签: c++ string class exception char