gpt4 book ai didi

c++ - 为什么libcxx的condition_variable是constexpr和noexcept,但在标准中不是?

转载 作者:行者123 更新时间:2023-12-02 09:55:14 25 4
gpt4 key购买 nike

https://github.com/llvm-mirror/libcxx/blob/master/include/__mutex_base#L290

class _LIBCPP_TYPE_VIS condition_variable
{
__libcpp_condvar_t __cv_ = _LIBCPP_CONDVAR_INITIALIZER;
public:
_LIBCPP_INLINE_VISIBILITY
_LIBCPP_CONSTEXPR condition_variable() _NOEXCEPT = default;

但标准声明为
class condition_variable {
public:
condition_variable();
~condition_variable();

( http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2020/n4849.pdf)

并且 condition_variable()可能会抛出。

libcxx是否与C++ Standard不兼容,还是我错了?

最佳答案

如果实现不会抛出异常,则允许实现将noexcept添加到非虚函数,请参见C++ 17标准的[res.on.exception.handling]/5(草稿N4659)。

但是,不允许实现将constexpr添加到函数。参见[constexpr.functions]/1。另请参见LWG issue 2013
std::condition_variable::condition_variable()既未指定为constexpr,也未指定为noexcept,但在任何情况下都必须抛出异常。参见[thread.condition.condvar]

因此,noexcept很好,但是constexpr不好。但是,被标记为constexpr的函数不应被标记为常见错误。例如,GCC故意声明数学函数constexpr,尽管不应如此。

关于c++ - 为什么libcxx的condition_variable是constexpr和noexcept,但在标准中不是?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60820021/

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