名稱空間
變體
操作

std::indirectly_writable

來自 cppreference.com
 
 
迭代器庫
迭代器概念
indirectly_writable
(C++20)
迭代器原語
演算法概念與工具
間接可呼叫概念
常用演算法要求
(C++20)
(C++20)
(C++20)
工具
(C++20)
迭代器介面卡
範圍訪問
(C++11)(C++14)
(C++14)(C++14)  
(C++11)(C++14)
(C++14)(C++14)  
(C++17)(C++20)
(C++17)
(C++17)
 
定義於標頭檔案 <iterator>
template< class Out, class T >

    concept indirectly_writable =
        requires(Out&& o, T&& t) {
            *o = std::forward<T>(t);
            *std::forward<Out>(o) = std::forward<T>(t);
            const_cast<const std::iter_reference_t<Out>&&>(*o) = std::forward<T>(t);
            const_cast<const std::iter_reference_t<Out>&&>(*std::forward<Out>(o)) =
                std::forward<T>(t);
        };

        /* 以上四個表示式都不需要保留等價性 */
(C++20 起)

概念 indirectly_writable<Out, T> 指定了將型別和值類別由 T 編碼的值寫入迭代器 Out 所引用物件的要求。

[編輯] 語義要求

e 為一個表示式,使得 decltype((e))T,且 o 為型別 Out 的可解引用物件,則 indirectly_writable<Out, T> 僅在以下情況被建模:

在評估任何上述賦值表示式後,不要求 o 可解引用。如果 e 是一個 xvalue,則它所表示的物件的最終狀態是有效但未指定的。

[編輯] 等價性保留

在標準庫概念的 requires 表示式中宣告的表示式必須是等價性保留的(除非另有說明)。

[編輯] 注意

使用 operator* 的唯一有效方式是在賦值表示式的左側。透過間接可寫型別的相同值進行的賦值只能發生一次。

帶有 const_cast 的必需表示式防止帶有 prvalue reference 型別的 indirectly_readable 物件意外滿足 indirectly_writable 的語法要求,同時允許代理引用在它們的 constness 是淺層的情況下繼續工作。參見 Ranges TS issue 381