C 11 noexcept限定词和在线方法

C 11 noexcept限定词和在线方法,第1张

概述当C11对使用noexcept限定词声明的其他函数进行调用时,C 11是否提供内联函数或方法的任何保证? class My_String { ... const char * c_str () const noexcept; inline operator const char * () const { return c_str(); }}; 我假设优化编译器可以自由地实现没有 当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可能会重要的地方.

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

总结

以上是内存溢出为你收集整理的C 11 noexcept限定词和在线方法全部内容,希望文章能够帮你解决C 11 noexcept限定词和在线方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1233626.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存