C标准是什么意思用overexcept来覆盖一个throw()函数?
以下似乎在我尝试过的几个编译器上编译:
class A { public: virtual void foo() throw() = 0; }; class B : public A { public: virtual void foo() noexcept override { } }; 似乎可以用一个更新的noexcept规范覆盖一个throw()函数.我也尝试了相反的(overpiding noexcept with throw()),它似乎工作.这是为什么?这是未定义的行为还是允许的? 请注意,代码生成受到noexcept vs throw()的影响.它们也没有等效的行为,因为noexcept调用与throw()不同的终止函数.一个理想的答案将会提到行为上的差异,为什么他们这样做或不重要. 解决方法
你甚至可以做到这一点,而不是压倒一切:
void f() throw(); void f() noexcept { throw 1; } [except.spec]/9清楚地表明,这是定义中的规范来控制发生什么:
这不是一个问题,因为这样做的特殊处理发生在被叫方,而不是来电者;所有调用者需要知道的是,没有例外会永远离开这个功能. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- XML详解
- Oracle 用一个表字段更新另一个表字段三种方法
- dojo学习第一天--搭建dojo学习环境
- c# – User.Identity.GetUserId是否已缓存或每次从数据库中
- ruby – Carrierwave MiniMagick – 如何将动画GIF压缩到第
- 使用Swift制作SKSpriteNode子类
- 使用MinGW的GLEW问题:未定义的引用“_imp__glewExperiment
- swift – 核心数据:无法将类型“MyType_MyType_2”的值转换
- wpf – 使用具有FormattedText的TextOptions.TextFormattin
- oracle-apex – wwv_flow.debug()vs apex_debug.message()