decay-copy
template< class T > typename std::decay<T>::type decay-copy( T&& value ); |
(seit C++11) (bis C++20) (nur Exposition*) |
|
| template< class T > requires std::convertible_to<T, std::decay_t<T>> |
(seit C++20) (nur Exposition*) |
|
Gibt eine dekayed prvalue Kopie von value zurück, die mittels std::forward<T>(value) (implizit in den dekayed Typ konvertiert) erzeugt wird.
Inhalt |
[bearbeiten] Parameter
| value | - | Der zu kopierende Wert |
[bearbeiten] Rückgabewert
Eine dekayed Kopie von value als prvalue.
[bearbeiten] Hinweise
decay-copy wurde durch die Auflösung von LWG issue 929 eingeführt. Es wird zunächst in der Concurrency Support Library verwendet, um sicherzustellen, dass Argumente bei der Übergabe by-value dekayed werden, und später in der Ranges Library.
Das Sprachfeature auto(x), das in C++23 eingeführt wurde, ermöglicht ebenfalls die Erzeugung von dekayed Kopien als prvalues. Der einzige Unterschied besteht darin, dass decay-copy value immer materialisiert und eine Kopie erzeugt, während auto(expr) ein No-op ist, wenn expr ein prvalue ist.
Alle Verwendungen von decay-copy in der Standardbibliothek (siehe unten), mit Ausnahme von views::all, ranges::take_view und ranges::drop_view, werden seit C++23 durch auto(x) ersetzt.
[bearbeiten] Defect Reports
Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| LWG 3724 | C++20 | decay-copy war nicht eingeschränkt |
eingeschränkt |
[bearbeiten] Siehe auch
erstellt ein neues thread-Objekt(public member function of std::thread) | |
konstruiert neues jthread-Objekt(public member function of std::jthread) | |
| (C++11) |
führt eine Funktion asynchron aus (potenziell in einem neuen Thread) und gibt ein std::future zurück, das das Ergebnis enthalten wird (Funktionsvorlage) |
| (C++20) |
gibt einen Iterator zum Anfang eines Ranges zurück (Customization Point Objekt) |
| (C++20) |
gibt ein Sentinel zurück, das das Ende eines Ranges anzeigt (Customization Point Objekt) |
| (C++20) |
gibt einen Reverse-Iterator zu einem Range zurück (Customization Point Objekt) |
| (C++20) |
gibt einen Reverse-End-Iterator zu einem Range zurück (Customization Point Objekt) |
| (C++20) |
gibt eine Ganzzahl zurück, die der Größe eines Ranges entspricht (Customization Point Objekt) |
| (C++20) |
ruft einen Zeiger auf den Anfang eines zusammenhängenden Ranges ab (Customization Point Objekt) |
| (C++20) |
ein view, der alle Elemente eines range enthält(Alias-Template) (Range-Adaptor-Objekt) |
| (C++20) |
ein view, der aus den ersten N Elementen eines anderen view besteht(Klassen-Template) (Range-Adaptor-Objekt) |
| (C++20) |
ein view, der aus Elementen eines anderen view besteht, wobei die ersten N Elemente übersprungen werden(Klassen-Template) (Range-Adaptor-Objekt) |