首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

为何throw出来的自定义exception类需要加()来表示默认初始化

2013-12-17 
为什么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()是一个对象。
[解决办法]
引用:
Quote: 引用:

throw的是一个对象,一个实例。
DivideByZero是一个类名。DivideByZero()是一个对象。


哦,好吧,但是为什么加一个()就可以表示一个对象呢?

引用:
一般的具有default constructor的class
初始化的时候不是不能够加()的吗?

楼主我明白你的意思了,不能加()的情况是定义一个类实例的时候比如说DivideByZero myInstance 这里确实不假(),而throw 的是DivideByZero(),类名后边没有类实例的变量名,所以需要加(),像楼上各位说的一样,匿名实例
[解决办法]
楼主太实诚了。 之所以有 "一般的具有default constructor的class初始化的时候不是不能够加()" 这么一件事情,不是C++语言有什么好的理由不愿意或不能加,而是C++语法太shi了,在某些情况下,无参构造加了()无法与函数声明进行区分,所以无奈只好允许不加()。 也就是说,某种意义上,加了()也是OK的,只是编译器会优先把它当函数声明对待,而不加()其实是不正宗的,但因为无歧义,所以还成了不二之选。

DivideByZero() 并没有这个问题。

热点排行