繁体   English   中英

std::destroy 是基本类型的无操作吗?

[英]Is std::destroy a no-op for fundamental types?

我经常写这样的东西来防止std::destroy循环遍历不需要销毁的元素的 arrays 但我不知道它是否真的有用。

if constexpr (!std::is_fundamental_v<element_type>) {

    std::destroy(container_begin(), container_end());

}

if constexpr语句改变了这段代码的行为,会丢弃吗?

如果 constexpr 语句改变了这段代码的行为,会丢弃吗?

假设容器的迭代没有副作用,它不会以任何方式改变可观察的行为。

std::destroy的行为是为每个元素调用location->~T() location->~T()对普通类型(包括基本类型)没有影响。

优化器能否判断出循环遍历容器没有副作用取决于优化器的能力。 如果容器是一个数组,这可能很容易证明。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM