簡體   English   中英

std :: function的移動賦值不是noexcept,而是std :: function :: swap。是什么賦予了?

[英]std::function's move assignment is not noexcept, but std::function::swap is. What gives?

func.wrap.func中的 std::function的概要告訴我們

function& operator=(function&&);

移動賦值運算符不是noexcept ,禁止僅使用標准容器中的移動類型。

但! 它也告訴我們

void swap(function&) noexcept;

同樣,默認構造函數是

function() noexcept;

因此,我們可以使用默認構造函數后跟交換來實現移動構造函數。

因為我們可以使用swap實現移動賦值運算符( swap具有更強的后置條件):

  • 如何在std::function實現noexcept swap?
  • 為什么std::function的移動賦值運算符不是noexcept

如何在std::function實現noexcept swap?

std::function對象不一定直接包含目標。 它可以包含指向動態分配的目標內存副本的指針。 它幾乎可以用任何理由來做這件事。 最常見的是目標太大而無法直接適應function ,但對於阻止function滿足其要求的任何其他目標也是如此。 如果function只保存指針,則該指針可以很容易地移動到另一個function

為什么std::function的移動賦值運算符不是noexcept

沒有充分的理由,這就是為什么有一個建議在未來的C ++版本中使它成為noexceptp0771r0 它指出,與標准指定的相反,一些實現已經將此標記為noexcept

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM