gpt4 book ai didi

c++ - 放置 new 加析构函数和简单的值初始化 noexcept 语义

转载 作者:太空宇宙 更新时间:2023-11-04 13:12:27 24 4
gpt4 key购买 nike

可以假设在未计算的上下文中,(::new (std::declval< void * >()) T())->~T()在语义上(在 noexcept 的意义上,但在表达类型的意义上)等同于简单的 T() ?假设既不是全局的,也不是类范围的 operator new重载,如果它喃喃自语很多。

通常在类型特征中 T()在运算符内部使用 noexcept()确定是否只有单独的构造函数是 noexcept或不。肯定是错的。

为防止失去一般性,可以假设 T()这里要么调用默认构造函数,要么调用任何其他构造函数。

最佳答案

Can one assume in unevaluated context, that (::new (std::declval<
void * >()) T())->~T()
is semantically full equivalent to simple T()?

不,最后一个表达式有一个析构函数,隐式是一个void返回类型。

#include <new>
#include <type_traits>

struct T{int x; double y; };
int main(){
constexpr int size = sizeof((::new (std::declval< void * >()) T())->~T());
}

编译器应该提示试图获得 sizeof一个void

关于c++ - 放置 new 加析构函数和简单的值初始化 noexcept 语义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39264089/

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