gpt4 book ai didi

c++ - 如何为析构函数指定 nothrow 异常说明符?

转载 作者:搜寻专家 更新时间:2023-10-31 00:33:28 26 4
gpt4 key购买 nike

我试图指定一个函数是 nothrow每当 Foo 的析构函数时不扔。我可以通过使用类型特征 std::is_nothrow_destructible<> 来做到这一点.我怎样才能直接做到这一点?我试过以下方法,但如果我取消注释注释行,它不会编译

#include <iostream>
#include <type_traits>

class Foo
{
public:
~Foo() noexcept {}
};

// void f() noexcept(noexcept(~Foo{})) { } // error here
void g() noexcept(std::is_nothrow_destructible<Foo>::value)
{

}

int main()
{
g();
}

我得到一个错误

 error: no match for 'operator~' (operand type is 'Foo')

错误说明符 noexcept(noexcept(~Foo()))不行,尽管对于构造函数我可以使用 noexcept(noexcept(Foo())) .我是否遗漏了一些明显的语法?

最佳答案

析构函数只能通过成员访问表达式调用。所以语法是:

void f() noexcept(noexcept(std::declval<Foo>().~Foo()))

关于c++ - 如何为析构函数指定 nothrow 异常说明符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28597376/

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