gpt4 book ai didi

c++ - 为什么 std::runtime_error::what() 返回 const char* 而不是 std::string const&

转载 作者:太空狗 更新时间:2023-10-29 23:41:24 26 4
gpt4 key购买 nike

为什么 std::runtime_error::what() 返回 const char* 而不是 std::string const& ?在许多情况下,直接返回对嵌入字符串的引用会很方便,并且可以避免一些开销。那么不返回的理由是什么?首先是对内部字符串的 const 引用,而不是提供重载函数?我想它伴随着一个字符串 ctor 也能够抛出异常,但我没有看到返回字符串引用的风险。

最佳答案

std::runtime_error 继承自 std::exception ,它定义了 virtual const char* what() const throw(); 所以最简单的回答是它是函数的重载,您可以确定任何标准异常都以这种方式定义它。它可能(取决于实现)返回 std::string,但它与标准库的其余部分不一致。

我认为 what() 返回 const char* 的原因是您可以避免任何可能失败的操作(尤其是可能抛出异常的操作)。考虑以下代码,它应该不会失败

virtual const char* what() const throw() {
return "An error has occured";
}

但是在下面的代码中,std::string 的分配可能会失败,抛出异常:

std::string what() const throw() {
return std::string("An error has occured");
}

如果字符串的构造函数在这里抛出,应用程序很可能无论如何都会崩溃,因为函数指定了 throw()

在异常中使用 std::string 需要分配内存,这可能是不可能的(注意 std::bad_alloc 继承自 std: :exception 也是)。

关于c++ - 为什么 std::runtime_error::what() 返回 const char* 而不是 std::string const&,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11594465/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com