A throw-expression with no operand in C++

本文介绍了 C++ 中如何使用空抛出表达式重新抛出当前正在处理的异常,并解释了这种表达式只应在 catch 处理程序或从 catch 处理程序内部调用的函数中出现的原因。此外,还展示了如何声明不抛出任何异常的函数。

    A throw-expression with no operand re-throws the exception currently being handled. Such an expression should appear only in a catch handler or in a function called from within a catch handler. The re-thrown exception object is the original exception object (not a copy). For example: 

 

 

 

 

 

   An empty throw statement tells the compiler that the function does not throw any exceptions. It is the equivalent to using __declspec(nothrow). For example:

 
tpDal/dalTestDmp.cpp: In functionint dalTestCfgWithDebug(dal_ado_t*, dal_attr*)’: ../../../../../../src/platform/include/midware/dalAdo.h:940:303: error: second operand to the conditional operator is of type ‘void’, but the third operand is neither a throw-expression nor of type ‘void’ for (tpObjIterInit((_adoi)->option.data.iter,(_adoi)->option.data.kfv),tpObjIterNextKeyBeforeField((_adoi)->option.data.iter);tpObjIterHasNext((_adoi)->option.data.iter)?(TPOBJ_TYPE_IS_FIELD(tpObjIterGetNextValType((_adoi)->option.data.iter))?tpObjIterNext((_adoi)->option.data.iter):tpObjIterNextKey((_adoi)->option.data.iter)),1:0;) ~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~ tpDal/dalTestDmp.cpp:86:2: note: in expansion of macro ‘DAL_ADOI_OPTION_LOOP’ DAL_ADOI_OPTION_LOOP(adoi) ^~~~~~~~~~~~~~~~~~~~ In file included from ../../../../../../src/platform/include/midware/opFrame.h:14:0, from tpDal/dalTestDmp.cpp:15: tpDal/dalTestDmp.cpp:323:52: warning: ISO C++ forbids converting a string constant to ‘CHAR* {aka char*}’ [-Wwrite-strings] PFM_IF_FAIL_RET_VAL(dalHandlerUnreg(DAL_MOD_TEST),-1); ^ ../../../../../../src/platform/include/fepPfm.h:100:11: note: in definition of macro ‘PFM_IF_FAIL_RET_VAL’ __rv = (expression); \ ^~~~~~~~~~ tpDal/dalTestDmp.cpp:324:92: warning: ISO C++ forbids converting a string constant to ‘CHAR* {aka char*}’ [-Wwrite-strings] PFM_IF_FAIL_RET_VAL(dalHandlerReg(DAL_MOD_TEST,(val_c==0)?dalTestCfg:dalTestCfgWithDebug),-1); ^ ../../../../../../src/platform/include/fepPfm.h:100:11: note: in definition of macro ‘PFM_IF_FAIL_RET_VAL’ __rv = (expression); \ ^~~~~~~~~~ In file included from ../../../../../../src/platform/include/midware/dal.h:13:0, from tpDal/dalTestDmp.cpp:16: tpDal/dalTestDmp.cpp: In functionint dalTestCfg(dal_ado_t*, dal_attr*)’: ../../../../../../src/platform/include/midware/dalAdo.h:940:303: error: second operand to the conditional operator is of type ‘void’, but the third operand is neither a throw-expression nor of type ‘void’ for (tpObjIterInit((_adoi)->option.data.iter,(_adoi)->option.data.kfv),tpObjIterNextKeyBeforeField((_adoi)->option.data.iter);tpObjIterHasNext((_adoi)->option.data.iter)?(TPOBJ_TYPE_IS_FIELD(tpObjIterGetNextValType((_adoi)->option.data.iter))?tpObjIterNext((_adoi)->option.data.iter):tpObjIterNextKey((_adoi)->option.data.iter)),1:0;)
最新发布
06-26
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值