[英]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.