与c++的Exception throw语句混淆

Confused with C++ Exception throw statement

本文关键字:语句 throw Exception c++      更新时间:2023-10-16

我是c++的新手,所以很抱歉问了非常愚蠢的问题,但我对c++异常处理机制中的throw语句感到困惑。

  • 在下面的代码中,为什么我们调用与类的名字吗?
  • 是构造函数吗?
  • 是否创建class Except的实例?

我不明白这里的语法。

class A
{
public:
  class Except{};
  void foo() { throw Except(); }
};
int main()
{
   A a;
   try
   {
     a.foo();    
   }
   catch(Except E)//exception handler
   {
     cout << "Catched exception" << endl;    
   }
}

是构造函数吗?

是的。

是否创建了Except类的实例?

是的了。这两个陈述都是正确的。

classname( arguments )

其中classname是一个类的名称,构造了这个类的一个实例,将任何可选的arguments传递给适当的类构造函数。

当然,构造函数是类方法,其名称与类名称相同。这就是为什么你的两个问题都有相同的答案,"是"。

创建类的临时实例。通常,classname用于声明一个变量,该变量代表该类的一个实例,但是该语法构造一个类的临时实例,该实例在表达式结束时被销毁(通常)。如果只需要将类的实例传递给另一个函数,则不需要单独的变量(抛出异常也属于这一类)。