gpt4 book ai didi

c++ - 函数在 C++17 中必须是 `noexcept` 吗?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:41:28 26 4
gpt4 key购买 nike

<分区>

在优化代码的某些部分时,我决定检查是否可以将某些方法声明为 noexcept ,这归结为我对 <cmath> 中的数学函数的不完整了解.

所以,我决定检查是否 sin()asin() (作为示例)我正在使用的实际上是 noexcept .

static_assert(noexcept(asin(1)));
static_assert(noexcept(sin(1)));

成功通过,所以他们实际上是noexcept 。我还查看了标准库实现中的相应定义:

template <class _A1>
inline _LIBCPP_INLINE_VISIBILITY
typename std::enable_if<std::is_integral<_A1>::value, double>::type
asin(_A1 __lcpp_x) _NOEXCEPT {return ::asin((double)__lcpp_x);}

确认了noexcept它们的本质,至少在我目前使用的实现中是这样。

但是,我无法找到这是否是有保证的行为,比如说,标准所要求的。所以,我想知道它是否是必需的行为。如果不是,不要求他们成为noexcept的动机是什么? ?

我的 usual reference cppreference.com不列出noexcept对于这些功能(参见 this, in comparison )。可能,这里有些困惑来自与 C 的兼容性;但是,我找不到令人信服的逻辑 <cmath>显然使用 C++ header ,而不是 C 兼容 header 。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com