[我经常写这样的东西来防止std::destroy
循环通过不需要破坏的元素数组,但是我不知道它是否真的有用。
if constexpr (!std::is_fundamental_v<element_type>) {
std::destroy(container_begin(), container_end());
}
删除if constexpr
语句会改变此代码的行为吗?
如果constexpr语句在此代码的行为中发生任何变化,是否会删除?
假设容器的迭代没有副作用,它不会以任何方式改变可观察的行为。
std::destroy
的行为是为每个元素调用location->~T()
。 location->~T()
对普通类型(包括基本类型)没有影响。
优化器是否可以弄清楚在容器上循环是否没有副作用取决于优化器的功能。如果容器是数组,则可能很容易证明。