簡體   English   中英

C++ STL 容器要求 - 后置條件混淆

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

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