![](/img/trans.png)
[英]Why can't char** be the return type of the following function in C++?
[英]C++ exception return type why char*
有人可以解釋為什么自編的C ++異常,從異常繼承返回一個char *而不是一個字符串?
class myexception: public exception
{
virtual const char* what() const throw()
{
return "My exception happened";
}
} myex;
由於std :: exception被設計為所有異常的基類,因此接口的編寫方式使得特化不需要可能拋出的代碼。 他們可能會使用它,但他們不需要它來實現接口。
如果基本異常類需要std::string
,那么std :: out_of_memory就無法從它繼承(因為在運行時遇到內存不足的情況后,構造一個傳遞給構造函數的字符串可能不起作用) 。
完全基於POD類型的類的構造允許實現std :: out_of_memory(以及可能在特殊情況下創建的其他異常)作為特化。
這並不意味着您不能在異常中使用std :: string(或其他任何東西)。 實際上,實際中的大多數異常都是從std :: logic_error和std :: runtime_error派生的,兩者都采用了std :: string參數。
注意 :除非您確實需要這個,否則請考慮從std :: runtime_error或std :: logic_error繼承您的基本異常類。 它們是更高級別,並且直接從std :: exception繼承比大多數情況需要的更多。
myexception
繼承自std::exception
類,它定義了這個虛方法http://en.cppreference.com/w/cpp/error/exception/what :
virtual const char* what() const;
您無法在派生類中更改虛函數的簽名。 std::exception
有這樣的簽名,因為std::string
構造函數可以自己拋出異常,這將導致災難。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.