Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      C++ named requirements:ValueSwappable(since C++11)

      From cppreference.com
      <cpp‎ |named req
       
       
      C++ named requirements
       

      Two objects of this type can be dereferenced and the resulting values can be swapped using unqualified function callswap() in the context where bothstd::swap and the user-definedswap()s are visible.

      [edit]Requirements

      A type T isValueSwappable if

      1. T satisfies theLegacyIterator requirements.
      2. For any dereferenceable objectx of typeT (that is, any value other than the end iterator),*x satisfies theSwappable requirements.

      Many standard library functions expect their arguments to satisfyValueSwappable, which means that any time the standard library performs a swap, it uses the equivalent ofusingstd::swap; swap(*iter1,*iter2);.

      [edit]Example

      Run this code
      #include <iostream>#include <vector> class IntVector{std::vector<int> v;//  IntVector& operator=(IntVector); // not assignable (C++98 way)public:    IntVector& operator=(IntVector)= delete;// not assignablevoid swap(IntVector& other){        v.swap(other.v);}}; void swap(IntVector& v1, IntVector& v2){    v1.swap(v2);} int main(){    IntVector v1, v2;// IntVector is Swappable, but not MoveAssignable    IntVector* p1=&v1;    IntVector* p2=&v2;// IntVector* is ValueSwappablestd::iter_swap(p1, p2);// OK: iter_swap requires ValueSwappable//  std::swap(v1, v2); // compiler error! std::swap requires MoveAssignable}

      [edit]See also

      specifies that the values referenced by twoindirectly_readable types can be swapped
      (concept)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/named_req/ValueSwappable&oldid=156485"

      [8]ページ先頭

      ©2009-2025 Movatter.jp