3

我正在尝试了解我的 C++ 类的异常,但我对这个程序有一些不明白的地方。为什么异常中没有创建对象?为什么只提供类名和参数?

这里:throw( testing ("testing this message"));

#include <iostream>
#include <string>
#include <stdexcept>

using namespace std;


class testing: public runtime_error
{
public:
  testing(const string &message)
    :runtime_error(message) {}
};

int main()
{
  try {
    throw( testing ("testing this message"));
  }
  catch (runtime_error &exception) {
    cerr << exception.what() << endl;
  }
  return 0;
}
4

1 回答 1

4

您正在创建一个临时testing对象。我知道语法看起来有点滑稽,因为它没有命名。你期待看到testing myObj("Testing this message");,但你得到的是同样的东西,没有变量名。

在你的构造函数中放置一个断点,testing你会发现你真的在创建一个对象。它只是在您创建的范围内没有名称。

您可以在许多地方执行此操作(throws、returns 以及作为函数的参数)...

return std::vector<int>(); // return an empty vector of ints

func(MyClass(1, 2, 3)); // passing `func` a `MyClass` constructed with the arguments 1, 2, and 3
于 2012-08-20T01:30:10.663 回答