2015-05-19 104 views
0
using namespace std; 

struct MyException : public exception 
{ 
    const char * what() const throw() // <--- This 
    { 
    return "C++ Exception"; 
    } 
}; 

請考慮標出的行。 有人可以解釋我的這種說法解釋給什麼()打電話

我想我應該有我的查詢範圍縮小到使用的語法「常量擲()」部分只有...

感謝所有的答覆

+4

你的標題很模糊和貧窮。請更改它以描述您所提及的特定語法,以便標題描述該問題。你還應該證明你已經完成了一些基礎研究。你正在使用哪本書? –

+0

你認爲我應該刪除這個問題嗎? –

+1

@Tri_Core你應該解答這個問題,以便清楚你在問什麼。你已經添加了文字說:「我認爲我應該已經把我的查詢限制在只有const throw()部分」 - 不要添加該文本,只是_do it_,即縮小查詢範圍。 – davmac

回答

5

這是一個成員函數的定義。

  • const char *是返回類型,一個指針到一個恆定字符,按照慣例一個0結尾的字符串數組的第一個字符。
  • what是函數名
  • ()是一個空的參數列表,表明該函數沒有參數
  • const資格的功能,所以它可以在const對象上調用,不能直接修改對象的成員
  • throw()是一個異常規範,它可以防止它拋出任何異常。

這將覆蓋在exception基類中聲明的虛擬功能,讓你得到一個短信描述拋出的特定異常:

try { 
    // Throw a specific type 
    throw MyException(); 
} catch (std::exception const & ex) { 
    // Catch a generic type and extract the message 
    std::cerr << ex.what() << '\n'; // prints "C++ Exception" 
} 
+0

我必須指出,它實際上並不能防止拋出異常。 'throw()'變體(現在不推薦使用)表明不會拋出任何異常,因此編譯器可以簡化代碼省略異常處理部分。但是,如果拋出異常,可能會導致程序進入不一致狀態,因爲沒有執行適當的清理。 – VTT

0

what是返回const char *的函數。 也不會引發異常

1

該行是類MyException的成員函數聲明。它遵循與任何其他函數聲明完全相同的語法。

const char * - 函數的返回類型。

what - 是函數的名稱。

() - (空)參數列表。該方法不帶參數。

const - 聲明這是一個const函數(通常,這意味着它不應該改變對象的狀態)。

throw() - 聲明函數不會引發異常。

0
using namespace std; 

struct MyException : public exception 
{ 
    const char * what() const throw() // <--- This 
    { 
    return "C++ Exception"; 
    } 
}; 

它是不是從你清楚問題,特別是你不確定哪一點,但我想這是throw(),因爲這不常用。

這是用來記錄的異常類型的方法可以拋出,從而使編譯器檢查:

  1. 當您使用方法,你正趕上一切拋出
  2. 難道不扔東西你不應該是

行的其餘部分是相當標準:

const char * what() const throw()

what():一個名爲what的函數。

what() const:什麼()是一個const功能,因此可以在類型MyException

const char* what() const的const對象使用:什麼是const函數,它返回一個指向const char

相關問題