2016-06-25 57 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,它现在感觉,谢谢:) –