2011-03-08 97 views
14
virtual const char* what() const throw() 
{ 

} 

AFAIK它是一個函數,它將返回一個指向可變char的常量指針。其餘的我不確定。任何人都可以幫忙嗎?這個函數聲明在C++中意味着什麼

+5

你想解釋哪部分? – 2011-03-08 09:18:50

回答

18

關於const throw()部分:

  • const意味着該功能(這是一個成員函數)將不會改變它被稱爲所述對象的可觀察的狀態。編譯器通過不允許你從這個方法調用非const方法來執行此操作,並且不允許你修改成員的值。
  • throw()表示您向編譯器承諾此函數絕不允許發出異常。這被稱爲例外規範,並且(長話短說)是無用的並且可能具有誤導性。
+1

有關異常規範的有趣看法是[here](http://www.gotw.ca/publications/mill22.htm)。 [Larry Osterman](http://blogs.msdn.com/b/larryosterman/archive/2006/03/22/558390.aspx)也寫了一篇關於它的博客文章,並且在Stack Overflow上有一個關於它的問題: [是否有任何使用C++拋出裝飾?](http://stackoverflow.com/questions/1410226/is-there-any-use-for-c-throw-decoration)。 – 2011-03-08 09:26:19

7

這意味着what是一個返回const char*的虛擬成員函數,它可以在const對象(最後的const)上被調用。 throw()意味着它排序保證不會拋出任何東西。

退房exception specifications in C++,並注意它們在C++ 0X :)

+0

+1爲非常有趣的鏈接。不知道這邊!謝謝! – marscode 2014-05-27 10:23:12

3

虛擬函數返回一個指針,以字符的不可修改的緩衝液,不接受參數,不修改任何構件的變量棄用該類屬於(即可以在常量實例上調用),並且不會拋出任何類型的異常。

+0

'throw()'裝飾意味着它不會拋出任何異常,不會拋出任何類型的異常。 – 2011-03-08 09:23:44

+0

謝謝,改變了它。 – datenwolf 2011-03-08 09:26:27

1

函數what()不採用參數,返回pointerconst char(因此您不能修改指針指向的內容,但可以修改指針本身)。這是virtual,所以它的行爲可以在派生類中被覆蓋。它不會拋出異常。它不修改它所屬類的任何成員。

+1

嗯,不。 'throw()'裝飾意味着它不會拋出任何異常。 – 2011-03-08 09:22:51

+0

是的,你說得對。這就是我想要寫的。不知道我在想什麼:)謝謝!糾正。 – 2011-03-08 09:24:58

1

這是一個返回const char *的虛函數。該方法末尾的const表示不允許更改被調用對象的狀態。這意味着它不允許修改對象的任何成員變量。 throw()部分是異常說明,說方法不會拋出任何異常。

0

所有庫異常的基類。

這是標準庫和某些語言表達式引發的所有異常的基類。您可以自由派生自己的異常類,或者使用不同的層次結構,或者拋出非類的數據(例如基本類型)。

0
  1. virtual:這意味着該函數可以在子類中重新實現,並調用經由基類指針的方法最終會調用重新實現。

  2. const char *不是一個指向可變char的常量指針 - 這是另一種方式。

  3. const意味着甚至可以在此類的常量實例上調用此方法。

  4. throw()表示此方法不會產生任何例外。

0

它實際上返回一個可變指針恆定字符塊。

其餘的已經被別人解釋了。

6

從左至右:

  • virtual - 該函數返回一個修改的指針到一個常數(陣列)炭
  • what() - - 這此函數可以在派生類
  • const char*被覆蓋函數不帶參數
  • const - 此函數不會修改調用它的對象的(非mutable)成員,因此可以是cal在const上領導
  • throw() - 這個函數不會拋出任何異常。如果有,將會調用unexpected
0

關於功能後的常量:有實際上有兩個含義 ,編譯器瞭解什麼,以及平時的 編程約定使它的意思。就編譯器 而言,它所做的只是使該指針成爲指向 const的指針。 const可以被拋棄,或者使用各種間接函數來修改對象的可觀察狀態。最後, 這個常量意味着程序員希望它意味着什麼。

今天的慣例是,它意味着對象的可觀察狀態不會改變。對於某些 合理定義的「可觀察狀態」。

關於異常規範:一個空異常 規範是一個沒有保證的規則,在考慮異常安全性時是非常重要的 。 標準的下一個版本已經棄用了異常規範,但它確實提供了一些其他方法來指定函數將不會拋出。

相關問題