◐ Shell
clean mode source ↗

C + + Konzepte: ValueSwappable – cppreference.com

Aus cppreference.com

<metanoindex/>

Zwei Objekte dieses Typs können dereferenziert und die daraus resultierenden Werte können vertauscht mit unqualifizierten Funktionsaufruf swap() im Kontext, wo sowohl std::swap und die benutzerdefinierten swap()s sichtbar sind .

Original:

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

The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

Anforderungen

Typ T ist ValueSwappable wenn

Original:

The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

1)

Typ T erfüllt die Iterator Anforderungen

Original:

Type T satisfies the Iterator requirements

The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

2)

Für jede dereferencable Objekt x vom Typ T (das heißt, ein anderer Wert als Ende iterator) erfüllt *x die Swappable Anforderungen .

Original:

For any dereferencable object x of type T (that is, any value other than the end iterator), *x satisfies the Swappable requirements.

The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

Viele Standard-Bibliothek Funktionen erwarten ihre Argumente ValueSwappable, was bedeutet, dass zu jeder Zeit die Standard-Bibliothek führt eine Swap es das Äquivalent von using std::swap; swap(*iter1, *iter2): verwendet bedeutet, zu befriedigen .

Original:

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

The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

Beispiel

#include <iostream>
#include <vector>

class IntVector {
    std::vector<int> v;
    IntVector& operator=(IntVector); // not assignable
 public:
    void 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 ValueSwappable
    std::iter_swap(p1, p2); // OK: iter_swap requires ValueSwappable
//  std::swap(v1, v2); // compiler error! std::swap requires MoveAssignable
}