Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      Non-propagating cache(C++20)

      From cppreference.com
      <cpp‎ |ranges
       
       
      Ranges library
      Range adaptors
      Helper items
      (until C++23)  (C++23)
      non-propagating-cache


       
      template<class T>

          requiresstd::is_object_v<T>

      class/*non-propagating-cache*/;
      (since C++20)
      (exposition only*)

      Some range adaptors such asranges::join_view andranges::lazy_split_view conditionally store value (e.g. an iterator) which is specified in terms of an exposition-only class templatenon-propagating-cache.

      The wrapper behaves exactly likestd::optional<T>, except that:

      • it does not copy the value of the source when it is copy constructed or assigned to,
      • it resets the value of the source when it is moved-from,
      • it resets its value when it is assigned from, and
      • it additionally provides a member function template to enable an input view to temporarily cache values as it is iterated over.

      The wrapper encapsulates a cache containing a value. Clearing cache is an operation equivalent to resetting a contained value. Such operation is performed when copying or moving a wrapper.

      Contents

      [edit]Template parameters

      T - the type of the contained value, must be an object type

      [edit]Member functions

      Copy and move constructors

      constexpr/*non-propagating-cache*/
         (const/*non-propagating-cache*/&)noexcept{}
      (1)(since C++20)
      constexpr/*non-propagating-cache*/
         (/*non-propagating-cache*/&& other)noexcept{ other.reset();}
      (2)(since C++20)
      1) The copy constructor has no effect.
      2) The move constructor clears the cache ofother.

      Copy and move assignment operators

      constexpr/*non-propagating-cache*/&

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

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

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

      }
      (2)(since C++20)
      1) The copy assignment operator clears the cache of*this.
      2) The move assignment operator clears caches of both*this andother.

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

      template<class I>
      constexpr T&/*emplace-deref*/(const I& i);
      (since C++20)
      (exposition only*)

      Initializes the contained value bydirect-initializing (but not direct-list-initializing) with*i. If*this already contains a value before the call,reset() is called.

      Returns a reference to the new contained value.

      The program is ill-formed unless the declarationT t(*i); is well-formed for some invented variablet. If*i is a prvalue of possibly cv-qualifiedT, then it is not required to be movable.

      Members identical tostd::optional

      Member functions

      constructs theoptional object
      (public member function ofstd::optional<T>)[edit]
      destroys the contained value, if there is one
      (public member function ofstd::optional<T>)[edit]
      assigns contents
      (public member function ofstd::optional<T>)[edit]
      Observers
      accesses the contained value
      (public member function ofstd::optional<T>)[edit]
      checks whether the object contains a value
      (public member function ofstd::optional<T>)[edit]
      Modifiers
      destroys any contained value
      (public member function ofstd::optional<T>)[edit]
      constructs the contained value in-place
      (public member function ofstd::optional<T>)[edit]

      [edit]Notes

      non-propagating-cache is used in implementations to cache the result ofbegin() to provide an amortized constant time complexity of the method.

      [edit]See also

      aview consisting of the sequence obtained from flattening aview ofranges
      (class template)(range adaptor object)[edit]
      aview consisting of the sequence obtained from flattening a view of ranges, with the delimiter in between elements
      (class template)(range adaptor object)[edit]
      aview over the subranges obtained from splitting anotherview using a delimiter
      (class template)(range adaptor object)[edit]
      aview over the subranges obtained from splitting anotherview using a delimiter
      (class template)(range adaptor object)[edit]
      a range ofviews that areN-sized non-overlapping successive chunks of the elements of anotherview
      (class template)(range adaptor object)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/ranges/non-propagating-cache&oldid=175589"

      [8]ページ先頭

      ©2009-2025 Movatter.jp