2011-07-21 56 views
2

如果我創建一個結構:C++虛方法

struct joinpoint_exception: exception 
{ 

    virtual const char* what() const throw(); 
}; 

什麼what() const throw()意味着在這種情況下?

+2

在C++中,它們不是「方法」,它們是「成員函數」。

回答

8

what是一個虛擬成員函數,返回一個指向常量char的指針,該指針本身是常量並且什麼都不拋出。

virtual const char* what() const throw(); 
|-----| <- virtual member function 
     |---------| <- returning a pointer to constant chars 
        |-----| <- named what 
          |---| <- which is constant 
            |-------| <- which does not throw 

(技術上的功能仍然可以拋出,但如果這樣做,直接進入std::unexpected,默認調用std::terminate

3

這意味着what()const(即它不會修改對象的邏輯狀態),並且它不會拋出任何異常(如throw()所示)。

5

what是方法的名稱

const意味着該方法不會改變任何內部的數據,除非其mutable

throw()意味着該方法不應該拋出一個異常,如果它確實std::unexpected改爲拋出

+1

對於'const',這是不正確的。該方法仍然可以修改'mutable'成員。對於'扔',這也是不正確的。該函數仍然可以拋出,儘管任何嘗試這樣做都會調用'std :: unexpected'。 –

+0

@比利:謝謝你的澄清。我從不使用mutalbe,如果一個方法是const,它的const對我來說:-) std :: unexpected對我來說是新的 –