[英]C++20 std::move in self assignment
大多數答案,包括這個答案,都指出std::move
不打算用於自賦值。
但是,我確實通過自移動分配在官方參考中看到了accumulate
的可能實現:
template<class InputIt, class T>
constexpr // since C++20
T accumulate(InputIt first, InputIt last, T init)
{
for (; first != last; ++first) {
init = std::move(init) + *first; // std::move since C++20
}
return init;
}
只有從 C++20 開始才安全嗎? 內部發生了什么?
EXP63-CPP聲明:
應該假設唯一可以在移出的對象實例上安全執行的操作是通過分配給對象重新初始化或通過調用其析構函數終止對象的生命周期
看起來重新初始化是完全合法的。
這不是自我分配。
自賦值將是init = std::move(init);
,你有init = std::move(init) + *first;
.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.