C++ : Throw Exception weird behavior?

标签 c++ exception

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

假设你声明了一个类:

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++ : Throw Exception weird behavior?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38026517/

相关文章:

java - 导致异常的多个 Java 根本原因

c++ - 编写一个返回堆栈的函数,该堆栈包含小于给定数字的所有元素,并且顺序相同?

c++ - 将参数传递给过程和从过程传递参数

c++ - 成员函数的相互返回类型(C++)

c++ - 同时对两个 vector (键/值)进行排序的最快方法?

c++ - 为什么 A[i][j] 和 *((int*)A + i * n + j) 给出不同的输出?

c# - 发生异常时,我应该如何处理 C# 应用程序中的退避或 "Wait and Retry"逻辑?

Javascript - 在异步函数中使用多个 try/catch 的最佳实践

c++ - boost::property_tree 无一异常(exception)

swift - “ fatal error :在展开可选值时意外发现nil”是什么意思?