簡體   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