簡體   English   中英

c ++異常返回類型為什么char *

[英]C++ exception return type why char*

有人可以解釋為什么自編的C ++異常,從異常繼承返回一個char *而不是一個字符串?

class myexception: public exception
{
  virtual const char* what() const throw()
  {
    return "My exception happened";
  }
} myex;

資料來源: http//www.cplusplus.com/doc/tutorial/exceptions/

由於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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM