2016-06-25 121 views
0

我剛剛注意到了一些東西,我覺得這很奇怪。這不是很重要,但它吸引了我的好奇心。C++:拋出異常奇怪的行爲?

試想一下,你聲明一個類:

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

我剛纔注意到,每當你拋出異常,你需要做的不同,這取決於您是否使用myExceptionmyExep

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

或:

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

我不明白爲什麼在一種情況下您需要(),而不是其他情況。 我使用clang ++作爲編譯器,不知道它是否與它有關。 我使用-Wall -Werror -Wextra標誌。

這不是什麼大不了的事情,我只是想了解真正發生了什麼。

+1

myException是一個類型,myExcept是一個對象。 – Mat

+0

嗯,我那愚蠢?當你在課堂上做這些事時,我真的認爲它就像是一個typedef。 那麼你可以用這種方式來表達一個對象嗎? Thx爲快速回答。 –

回答

3
class Foo { 
    ... 
} bar; 

只是一個寫

class Foo { 
    ... 
}; 
Foo bar; 

較短的方式你也可以使用這個語法,而不給出此類型的名稱:

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

在你的榜樣,myException是一個類型,而myExp是一個(可能是全局的)對象。

+0

Thx男人,我不知道爲什麼我真的認爲它就像一個typedef,它現在感覺,謝謝:) –