2011-07-21 18 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::terminateを呼び出すに、std::unexpectedに直接行く)

3

それは変更されませんすなわち、それは(what()constであることを意味しオブジェクトの論理状態)、例外をスローしないこと(throw()で示されるように)が含まれます。

5

what

constはそのmutable

throw()は、メソッドが例外をスローしてはならないことを意味しない限り、それは代わりにスローされstd::unexpectedを行う場合の方法は、任意の内部データを変更しないことを意味メソッドの名前です。

+1

'const'の場合、それは正しくありません。メソッドは 'mutable'メンバを変更することができます。 'スロー(throw) 'の場合は、それも正しくありません。この関数は 'std :: unexpected'を呼び出すことはできますが、まだスローできます。 –

+0

@Billy:説明をいただきありがとうございます。私はmutalbeを使用しません。メソッドがconstの場合、私のconstはstd :: unexpectedです。 –