[英]C++ STL Container requirements - Post condition confusion
我目前正在考慮實現一個自定義容器,該容器需要與 STL 算法兼容,因此必須滿足此處所述的 C++ 容器要求。
在該文檔中, Methods and operators
表指出,表達式a = b
具有a == b
的后置條件。 我對此感到非常困惑。 正如此表達式的表條目所述:
毀壞,或移動-受讓人所有元素
a
從元素b
據我了解,移動一個對象伴隨着期望被移動的對象(源對象?)將處於有效但未定義的狀態。 因此,我認為不能滿足條件a == b
。
我在這里缺少什么?
cppreference 頁面是從標准中刪節和改編的,以提高可讀性。 在這種情況下,它過度簡化了要求,這些要求必須區分不同的值類別(正如您正確推理的那樣)。 或者,兩個單獨的分配案例(在標准的表格中沒有連續出現)可能被意外合並。 無論哪種方式, cppreference 目前都是錯誤的。
這是(當前草案)標准所說的:
http://eel.is/c++draft/containers#container.requirements.general-4
對於移動分配:
表達式:
a = rv
(其中rv
是非常量右值)
返回類型:X&
操作語義:現有的所有元素a
都上移分配或銷毀
確保:a
等於rv
在此賦值之前的值
復雜度:線性
對於復制分配:
表達式:
r = a
返回類型:X&
確保:r == a
復雜度:線性
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.