名稱空間
變體
操作

非傳播快取 (C++20)

來自 cppreference.com
< cpp‎ | ranges
 
 
範圍庫 (Ranges library)
範圍介面卡 (Range adaptors)
輔助項 (Helper items)
(直到 C++23)  (C++23)
non-propagating-cache


 
template< class T >

    requires std::is_object_v<T>

class /*non-propagating-cache*/;
(C++20 起)
(僅作說明*)

一些範圍介面卡,例如 ranges::join_viewranges::lazy_split_view 會有條件地儲存值(例如迭代器),這些值是在一個僅用於說明的類模板 non-propagating-cache 中指定的。

該包裝器的行為與 std::optional<T> 完全相同,但以下情況除外:

  • 當它被複制構造或賦值時,它不會複製源的值,
  • 當它從源移動時,它會重置源的值,
  • 當它被賦值時,它會重置自己的值,並且
  • 它還提供了一個成員函式模板,以使輸入檢視在迭代時能夠臨時快取值。

該包裝器封裝了一個包含值的快取。清除快取的操作等同於重置所包含的值。當複製或移動包裝器時會執行此操作。

目錄

[編輯] 模板引數

T - 所包含值的型別,必須是物件型別

[編輯] 成員函式

複製建構函式和移動建構函式

constexpr /*non-propagating-cache*/
    ( const /*non-propagating-cache*/& ) noexcept {}
(1) (C++20 起)
constexpr /*non-propagating-cache*/
    ( /*non-propagating-cache*/&& other ) noexcept { other.reset(); }
(2) (C++20 起)
1) 複製建構函式沒有效果。
2) 移動建構函式清除 other 的快取。

複製賦值運算子和移動賦值運算子

constexpr /*non-propagating-cache*/&

    operator=( const /*non-propagating-cache*/& other ) noexcept
{
    if (std::addressof(other) != this)
        reset();
    return *this;

}
(1) (C++20 起)
constexpr /*non-propagating-cache*/&

    operator=( /*non-propagating-cache*/&& other ) noexcept
{
    reset();
    other.reset();
    return *this;

}
(2) (C++20 起)
1) 複製賦值運算子清除 *this 的快取。
2) 移動賦值運算子清除 *thisother 的快取。

non-propagating-cache<T>::emplace-deref

template< class I >
constexpr T& /*emplace-deref*/( const I& i );
(C++20 起)
(僅作說明*)

透過 直接初始化(但不是直接列表初始化)*i 來初始化所包含的值。如果 *this 在呼叫前已經包含值,則呼叫 reset()

返回對新的包含值的引用。

除非宣告 T t(*i); 對於某個虛構變數 t 是合法的,否則程式將格式錯誤。如果 *i 是可能是 cv 限定的 T 的右值,則不要求它可移動。

std::optional 相同的成員

成員函式

構造 optional 物件
(std::optional<T> 的公共成員函式) [編輯]
如果存在,銷燬所包含的值
(std::optional<T> 的公共成員函式) [編輯]
賦值內容
(std::optional<T> 的公共成員函式) [編輯]
觀察器
訪問所包含的值
(std::optional<T> 的公共成員函式) [編輯]
檢查物件是否包含值
(std::optional<T> 的公共成員函式) [編輯]
修改器
銷燬任何包含的值
(std::optional<T> 的公共成員函式) [編輯]
就地構造包含的值
(std::optional<T> 的公共成員函式) [編輯]

[編輯] 注意

non-propagating-cache 在實現中用於快取 begin() 的結果,以提供該方法的攤銷常數時間複雜度。

[編輯] 參閱

一個由展平的 ranges view 得到的序列組成的 view
(類模板) (範圍介面卡物件)[編輯]
一個 view,由扁平化範圍檢視獲得的序列組成,元素之間帶有分隔符
(類模板) (範圍介面卡物件)[編輯]
一個 view,包含透過分隔符拆分另一個 view 獲得的子範圍
(類模板) (範圍介面卡物件)[編輯]
一個 view,包含透過分隔符拆分另一個 view 獲得的子範圍
(類模板) (範圍介面卡物件)[編輯]
一個 view 的範圍,它是另一個 view 元素的 N 大小的非重疊連續塊
(類模板) (範圍介面卡物件)[編輯]