我刚刚发现了一些东西,我觉得这很奇怪。这不是很重要,但是却引起了我的好奇心。

假设您声明一个类:

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


我只是注意到,无论何时抛出该异常,都需要根据使用myException还是myExep进行不同的处理:

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


要么 :

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


我不明白为什么在一种情况下而不是其他情况下需要()
我将clang ++用作编译器,如果与之无关,则不知道。
我使用-Wall -Werror -Wextra标志。

这并不是什么大不了的事,我只是想了解真正发生的事情。

最佳答案

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是(可能是全局)对象。

关于c++ - C++:抛出异常怪异行为?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38026517/

10-12 17:16