困惑于C ++ Exception throw语句

时间:2016-08-09 11:25:22

标签: c++ exception syntax exception-handling 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;    
   }
}

1 个答案:

答案 0 :(得分:5)

  

它是构造函数吗?

  

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

是的。这两种说法都是正确的。

classname( arguments )

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

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

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