c – 使用带有constexpr函数的noexcept

c – 使用带有constexpr函数的noexcept,第1张

概述在Scott Meyers的“Effective Modern C”中,他提供了以下函数来查找数组的大小: template<typename T, std::size_t N>constexpr std::size_t arraySize(T (&)[N]) noexcept{ return N;} 这里’noexcept’的目的是什么?据我所知,noexcept仅影响运行时代码的 在Scott Meyers的“Effective Modern C”中,他提供了以下函数来查找数组的大小:
template<typename T,std::size_t N>constexpr std::size_t arraySize(T (&)[N]) noexcept{    return N;}

这里’noexcept’的目的是什么?据我所知,noexcept仅影响运行时代码的生成 – 但是我看不到在运行时调用此函数而不是编译时间的任何情况?

解决方法 在一般情况下,标记为constexpr的模板在实例化时可能会丢失该状态.如果一组特定的模板参数不允许,那么将默认删除该限定条件,并且生成的函数是“常规”函数.

它很可能被指定为教你一个好习惯.虽然确实将一个consexpr函数隐式假设为非抛出,但如果删除了函数的constexpr状态,它仍然不会干扰正确的noexcept规范.当它被用作表达式的一部分被馈送到noexcept()运算符时.

如果没有这样定义,它会在使用noexcept()的应用程序中使用它的函数的异常规范出现偏差.因为它被认为可能在没有规范的情况下投掷.

由于noexcept()运算符也是在编译时进行计算的,因此根本不是代码生成(就像你所说的那样).这更像是语义正确性的问题,类似于const正确性.

总结

以上是内存溢出为你收集整理的c – 使用带有constexpr函数的noexcept全部内容,希望文章能够帮你解决c – 使用带有constexpr函数的noexcept所遇到的程序开发问题。

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

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存