virtual const char* what() const throw()
{
}
AFAIK它是一個函數,它將返回一個指向可變char的常量指針。其餘的我不確定。任何人都可以幫忙嗎?這個函數聲明在C++中意味着什麼
virtual const char* what() const throw()
{
}
AFAIK它是一個函數,它將返回一個指向可變char的常量指針。其餘的我不確定。任何人都可以幫忙嗎?這個函數聲明在C++中意味着什麼
關於const throw()
部分:
const
意味着該功能(這是一個成員函數)將不會改變它被稱爲所述對象的可觀察的狀態。編譯器通過不允許你從這個方法調用非const
方法來執行此操作,並且不允許你修改成員的值。throw()
表示您向編譯器承諾此函數絕不允許發出異常。這被稱爲例外規範,並且(長話短說)是無用的並且可能具有誤導性。有關異常規範的有趣看法是[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
這意味着what
是一個返回const char*
的虛擬成員函數,它可以在const對象(最後的const)上被調用。 throw()
意味着它排序保證不會拋出任何東西。
退房exception specifications in C++,並注意它們在C++ 0X :)
+1爲非常有趣的鏈接。不知道這邊!謝謝! – marscode 2014-05-27 10:23:12
虛擬函數返回一個指針,以字符的不可修改的緩衝液,不接受參數,不修改任何構件的變量棄用該類屬於(即可以在常量實例上調用),並且不會拋出任何類型的異常。
'throw()'裝飾意味着它不會拋出任何異常,不會拋出任何類型的異常。 – 2011-03-08 09:23:44
謝謝,改變了它。 – datenwolf 2011-03-08 09:26:27
函數what()
不採用參數,返回pointer
爲const char
(因此您不能修改指針指向的內容,但可以修改指針本身)。這是virtual
,所以它的行爲可以在派生類中被覆蓋。它不會拋出異常。它不修改它所屬類的任何成員。
嗯,不。 'throw()'裝飾意味着它不會拋出任何異常。 – 2011-03-08 09:22:51
是的,你說得對。這就是我想要寫的。不知道我在想什麼:)謝謝!糾正。 – 2011-03-08 09:24:58
這是一個返回const char *的虛函數。該方法末尾的const
表示不允許更改被調用對象的狀態。這意味着它不允許修改對象的任何成員變量。 throw()
部分是異常說明,說方法不會拋出任何異常。
所有庫異常的基類。
這是標準庫和某些語言表達式引發的所有異常的基類。您可以自由派生自己的異常類,或者使用不同的層次結構,或者拋出非類的數據(例如基本類型)。
virtual
:這意味着該函數可以在子類中重新實現,並調用經由基類指針的方法最終會調用重新實現。
const char *
不是一個指向可變char的常量指針 - 這是另一種方式。
const
意味着甚至可以在此類的常量實例上調用此方法。
throw()
表示此方法不會產生任何例外。
它實際上返回一個可變指針恆定字符塊。
其餘的已經被別人解釋了。
從左至右:
virtual
- 該函數返回一個修改的指針到一個常數(陣列)炭what()
- - 這此函數可以在派生類const char*
被覆蓋函數不帶參數const
- 此函數不會修改調用它的對象的(非mutable
)成員,因此可以是cal在const
上領導throw()
- 這個函數不會拋出任何異常。如果有,將會調用unexpected
。關於功能後的常量:有實際上有兩個含義 ,編譯器瞭解什麼,以及平時的 編程約定使它的意思。就編譯器 而言,它所做的只是使該指針成爲指向 const的指針。 const可以被拋棄,或者使用各種間接函數來修改對象的可觀察狀態。最後, 這個常量意味着程序員希望它意味着什麼。
今天的慣例是,它意味着對象的可觀察狀態不會改變。對於某些 合理定義的「可觀察狀態」。
關於異常規範:一個空異常 規範是一個沒有保證的規則,在考慮異常安全性時是非常重要的 。 標準的下一個版本已經棄用了異常規範,但它確實提供了一些其他方法來指定函數將不會拋出。
你想解釋哪部分? – 2011-03-08 09:18:50