微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C 11 noexcept限定词和在线方法

当C11对使用noexcept限定词声明的其他函数进行调用时,C 11是否提供内联函数方法的任何保证?
class My_String { ...

    const char * c_str () const noexcept;
    inline operator const char * () const { return c_str(); }
};

我假设优化编译器可以自由地实现没有完整的EH和堆栈展开的内联方法,根据noexcept限定条件.我也会期待一个简单的访问器方法

... inline operator const char * () const { return m_buffer; }

虽然这个例子看起来微不足道,但是当用于实现其他类或函数时,异常保证很重要.问:C11标准是否将这个或内联方法标记为noexcept?或者更好地省略noexcept,除非匹配类或功能规范?

编辑:避免一些混乱:内联方法是否隐含?

解决方法

抱歉,没有.唯一的隐式异常规范是

>关于析构函数
>在其他隐式声明或明确认的特殊成员函数认构造函数,复制和移动构造函数,以及复制和移动赋值,如果未在类定义中声明,或声明为= default;
>取消分配功能:运算符删除和运算符删除[].

因此,使用任一示例声明,noexcept(static_cast< const char *>(std :: declval< const MyString>()))必须为false.继续写下noexcept可能会重要的地方.

当然,正如你所说,编译器优化仍然允许注意到内联函数不能抛出异常并简化调用者中的异常处理.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐