C ++:抛出异常奇怪的行为?

时间:2016-06-25 08:27:42

标签: c++ exception

我刚注意到了一些东西,我觉得这很奇怪。这不是很重要,但它引起了我的好奇心。

想象一下你宣布一个班级:

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

我刚注意到,无论何时抛出异常,都需要采用不同的方式,具体取决于您使用的是myException还是myExep

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

或:

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

我不明白你为什么在一个案例中需要()而在另一个案例中不需要-Wall -Werror -Wextra。 我使用clang ++作为编译器,dunno如果它与它有任何关系。 我使用foreach (string s1 in words) { string text1 = s1; string[] words1 = text1.Split('\t'); int a = words1.length; Regex regex = new Regex(@"/^[0-9]*$/"); foreach(string compare in words1) { if (regex.IsMatch(compare)) sr = sr + " " + compare; else quota = quota + " " + compare; } } 标志。

这不是什么大问题,我只想了解到底发生了什么。

1 个答案:

答案 0 :(得分:4)

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