我正在尝试理解我的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;
}
答案 0 :(得分:4)
您正在创建一个临时testing
对象。我知道语法看起来有点滑稽,因为它没有命名。你期望看到testing myObj("Testing this message");
,但如果没有变量名,你得到的就是同样的东西。
在testing
构造函数中放置一个断点,你会发现你真的在创建一个对象。它在您创建它的范围内没有名称。
你可以在很多地方(throw
s,return
和作为函数的参数)执行此操作...
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