gpt4 book ai didi

c++ - 为什么不 ~ 后跟::parse

转载 作者:IT老高 更新时间:2023-10-28 22:36:28 27 4
gpt4 key购买 nike

在 Andrei Alexandrescu 关于错误处理的演讲中:

C++ and Beyond 2012: Andrei Alexandrescu - Systematic Error Handling in C++ (大约 30 分钟)

Andrei 提供以下代码:

~Expected()
{
using std::exception_ptr;
if (gotHam) ham.~T();
else spam.~exception_ptr();
}

这个析构函数正在清理一个 union,它包含一些类型 T 或一个 std::exception_ptr。使用 placement new 填充 union 。

Andrei 然后解释说 using std::exception_ptr; 是必要的,因为以下代码无法解析:

    else spam.~std::exception_ptr();

这意味着如果您需要显式调用不同命名空间中类的析构函数,则始终需要使用 using 指令。

为什么第二个例子不解析?

以下代码会是一个有效的替代方案吗?

    else delete spam;

这是否与显式调用 std::exception_ptr 的析构函数具有相同的效果

最佳答案

Andrei 可能使用 using std::exception_ptr; 因为他的编译器坏了。

没必要。 spam.~exception_ptr(); 没有它应该编译得很好。

3.4.5/3. If the unqualified-id is ~type-name, the type-name is looked up in the context of the entire postfix-expression. If the type T of the object expression is of a class type C, the type-name is also looked up in the scope of class C.

它确实可以用 gcc 编译。

如果出于某种原因需要使用限定名,spam.std::exception_ptr::~exception_ptr(); 也会编译。

关于c++ - 为什么不 ~ 后跟::parse,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14156640/

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