为何throw出来的自定义exception类需要加()来表示默认初始化
为什么throw出来的自定义exception类需要加()来表示默认初始化?比如说这样的一个函数,其中DivideByZero是
为什么throw出来的自定义exception类需要加()来表示默认初始化?
比如说这样的一个函数,其中DivideByZero是程序员自己定义的一个exception class,
是空的,为什么throw出来的时候需要加一个()?一般的具有default constructor的class
初始化的时候不是不能够加()的吗?
double safe_divide(int top, int bottom) throw (DivideByZero)
{
if (bottom == 0)
throw DivideByZero();
return top/static_cast<double>(bottom);
[解决办法]throw的是一个对象,一个实例。
DivideByZero是一个类名。DivideByZero()是一个对象。
[解决办法]一般的具有default constructor的class
初始化的时候不是不能够加()的吗?
楼主我明白你的意思了,不能加()的情况是定义一个类实例的时候比如说DivideByZero myInstance 这里确实不假(),而throw 的是DivideByZero(),类名后边没有类实例的变量名,所以需要加(),像楼上各位说的一样,匿名实例
[解决办法]楼主太实诚了。 之所以有 "一般的具有default constructor的class初始化的时候不是不能够加()" 这么一件事情,不是C++语言有什么好的理由不愿意或不能加,而是C++语法太shi了,在某些情况下,无参构造加了()无法与函数声明进行区分,所以无奈只好允许不加()。 也就是说,某种意义上,加了()也是OK的,只是编译器会优先把它当函数声明对待,而不加()其实是不正宗的,但因为无歧义,所以还成了不二之选。
DivideByZero() 并没有这个问题。