我想知道异常对象是如何创建的?为什么处理函数参数可以是非常量引用?
例如:
class E{
public:
const char * error;
E(const char* arg):error(arg){
cout << "Constructor of E(): ";}
E(const E& m){
cout << "Copy constructor E(E& m): " ;
error=m.error;
}
};
int main(){
try{
throw E("Out of memory");
}
catch(E& e){cout << e.error;}
}
输出:
E() 的构造函数:内存不足
所以我拥有throw E("out of memory")
并且E("out of memory")
只是一个临时对象,并且没有创建任何对象,除非E("out of memory")
因为没有调用复制构造函数。因此,即使这E("out of memory")
只是一个临时对象,我也有一个接受非常量引用的处理程序。
你能向我解释为什么这是可能的吗?