gpt4 book ai didi

c++ - 错误 : function declared 'noreturn' should not return

转载 作者:太空狗 更新时间:2023-10-29 23:49:38 39 4
gpt4 key购买 nike

在我的工作场所,noreturn 有不同的内部名称属性。假设是INTERNAL_DONT_RETURN

我正在写一个类的成员函数,我在其中做类似的事情

INTERNAL_DONT_RETURN void foo() const
{
if(!*this)
{
throw CoolException();
}
m_call_throw();
}

这个m_call_throw()是一个私有(private)类成员std::function<void()>m_call_throw它作为 lambda 填充在类的构造函数中。这个 lambda 除了

m_call_throw([uncoolID]() { throw UncoolException(uncoolID); })

现在,gcc-4.9.3 和 clang 都给了我以下警告

error: function declared 'noreturn' should not return [-Werror,-Winvalid-noreturn]
}
^

我已经咨询过thisthis问题,但他们都没有解释上述警告的原因。

1) 编译器是否隐式添加 return正如解释的那样 here

2) 即使我抛出异常,为什么编译器认为我的函数会返回?

3) noreturn attribute提到

The noreturn keyword does not affect the exceptional path when that applies: a noreturn-marked function may still return to the caller by throwing an exception or calling longjmp.

这与我的问题相关吗?

最佳答案

但你确实回来了!如果 if 语句为假,则从函数末尾返回。您可能知道这永远不会发生,因为 m_call_throw() 永远不会返回任何一个(是吗?),但编译器显然不理解这个逻辑。

m_call_throw() 是否标记为 noreturn?如果没有,请添加它。如果编译器没有注意到这一点,您可以在函数末尾添加一个额外的 throw,您知道它永远不会到达,但应该使警告静音。

关于c++ - 错误 : function declared 'noreturn' should not return,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38607609/

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