【问题标题】:Confused with C++ Exception throw statement与 C++ 异常抛出语句混淆
【发布时间】:2016-12-15 10:05:27
【问题描述】:

我是 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 的实例,该构造函数不接受任何参数。
  • 随着你的学习;通过 const 引用捕获异常,例如 catch(const Except &amp; E)

标签: c++ exception syntax exception-handling throw


【解决方案1】:

是构造函数吗?

是的。

它是在创建一个例外类的实例吗?

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

classname( arguments )

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-15
    • 1970-01-01
    相关资源
    最近更新 更多