2016-06-25 9 views
0

私は何かに気づきました、そして、それはかなり変だと思います。それはあまり重要ではありませんが、私の好奇心を引き出します。C++:異常な動作を例外に投げる?

あなたがクラスを宣言想像:

class myException : public std::exception 
{ 
    /*do stuff*/ 
} myExep; 

私はちょうどあなたがその例外をスローするたびに、あなたはあなたがmyExceptionmyExepを使用するかどうかに応じて異なり、それを行う必要があることに気づい:

try 
{ 
    if (/*whatever*/) 
     throw myException(); 
} 

か:

try 
{ 
    if (/*whatever*/) 
     throw myExep; 
} 

なぜわかりません1つのケースでは()が必要であり、もう1つではありません。 コンパイラとしてclang ++を使っていますが、何か関係がある場合はdunnoです。 私は-Wall -Werror -Wextraフラグを使用します。

本当に大したことではありません。実際に何が起こっているのか理解したいだけです。 myExceptionがタイプ中で、あなたの例では

struct { 
    int x, y; 
} p; 
// p is an object with p.x and p.y fields 

+1

myExceptionは型ですが、myExceptはオブジェクトです。 – Mat

+0

私はそんなに馬鹿?あなたがクラスでそれを行うとき、それはtypedefのようなものだと本当に思っていました。 オブジェクトをそうすることができますか?速い答えのためのThx。 –

答えて

3
class Foo { 
    ... 
} bar; 

は、あなたはまた、タイプに名前を与えることなく、この構文を使用することができます

class Foo { 
    ... 
}; 
Foo bar; 

を書くだけの短い方法ですmyExpは(おそらく大域的な)オブジェクトです。

+0

Thx男、なぜ私は本当にそれがtypedefのようなものだと思ったのか分からない、それは今、感謝感謝する:) –

関連する問題