轻微破坏的意义

2024-03-25

在 C++17 中,新的std::optional要求它可以轻易被破坏,如果T在 [Optional.object.dtor] 中是可以轻易破坏的:

~optional();
1 Effects: If is_trivially_destructible_v<T> != true and *this包含一个值,调用val->T::~T().
2 Remarks: If is_trivially_destructible_v<T> == true那么这个析构函数应该是一个普通的析构函数。

因此,这个潜在的实现片段将不符合标准:

template <class T>
struct wrong_optional {
    union { T value; };
    bool on;

    ~wrong_optional() { if (on) { value.~T(); } }
};

我的问题是:这个授权有什么好处?据推测,对于普通可破坏类型,编译器可以计算出value.~T()是一个无操作并且不发出任何代码wrong_optional<T>::~wrong_optional().


std::optional已经有constexpr构造函数 http://en.cppreference.com/w/cpp/utility/optional/optional。当它的析构函数很平凡时,它是一个文字类型 https://en.cppreference.com/w/cpp/named_req/LiteralType。只能在常量表达式中创建和操作文字类型的对象。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

轻微破坏的意义 的相关文章

随机推荐