困惑于C++ Exception throw语句

use*_*926 6 c++ syntax exception-handling exception throw

我是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;    
   }
}
Run Code Online (Sandbox Code Playgroud)

Sam*_*hik 5

它是构造函数吗?

是.

它是否正在创建一个Except类的实例?

是的,再次.这两个陈述都是正确的.

classname( arguments )
Run Code Online (Sandbox Code Playgroud)

哪个classname类的名称构造此类的实例,将任何可选项传递arguments给适当的类构造函数.

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

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