std::forward
Da cppreference.com.
|
|
Questa pagina è stata tradotta in modo automatico dalla versione in ineglese della wiki usando Google Translate.
La traduzione potrebbe contenere errori e termini strani. Muovi il puntatore sopra al testo per vedere la versione originale. Puoi aiutarci a correggere gli gli errori. Per ulteriori istruzioni clicca qui. |
<metanoindex/>
<tbody> </tbody>| Elemento definito nell'header <utility>
|
||
template< class T > T&& forward( typename std::remove_reference<T>::type& t ); |
(1) | (dal C++11) |
template< class T > T&& forward( typename std::remove_reference<T>::type&& t ); |
(2) | (dal C++11) |
Quando viene utilizzato secondo la seguente ricetta in un modello di funzione, in avanti l'argomento di un'altra funzione esattamente come è stato passato alla funzione chiamante.
Original:
When used according to the following recipe in a function template, forwards the argument to another function exactly as it was passed to the calling function.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
template<typename T>
wrapper(T&& arg) {
foo(std::forward<T>(arg));
}
- Se una chiamata a
wrapper()passa unstd::stringrvalue, quindiTsi deduce astd::string(nonstd::string&,const std::string&ostd::string&&), estd::forwardassicura che un riferimento rvalue viene passato afoo.Original:If a call towrapper()passes an rvaluestd::string, thenTis deduced tostd::string(notstd::string&,const std::string&, orstd::string&&), andstd::forwardensures that an rvalue reference is passed tofoo.The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions. - Se una chiamata a
wrapper()passa un const lvaluestd::string, quindiTsi deduce aconst std::string&, estd::forwardassicura che un const lvalue riferimento viene passato alfoo.Original:If a call towrapper()passes a const lvaluestd::string, thenTis deduced toconst std::string&, andstd::forwardensures that a const lvalue reference is passed tofoo.The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions. - Se una chiamata a
wrapper()passa un non-conststd::stringlvalue, quindiTsi deduce astd::string&, estd::forwardassicura che un riferimento non const lvalue viene passato alfoo.Original:If a call towrapper()passes a non-const lvaluestd::string, thenTis deduced tostd::string&, andstd::forwardensures that a non-const lvalue reference is passed tofoo.The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
Note
Il tentativo di trasmettere un rvalue come valore assegnabile, come ad esempio creando un'istanza del modulo 2) con riferimento lvalue tipo T, è un errore di compilazione.
Original:
Attempting to forward an rvalue as an lvalue, such as by instantiating the form 2) with lvalue reference type T, is a compile-time error.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
Parametri
| t | - | l'oggetto da trasmettere
Original: the object to be forwarded The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. |
Valore di ritorno
static_cast<T&&>(t)
Eccezioni
Esempio
Questo esempio dimostra trasmissione perfetta del parametro della funzione make_unique () per l'argomento del costruttore di classe T
Original:
This example demonstrates perfect forwarding of the parameter of the function make_unique() to the argument of the constructor of class T
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
#include <iostream>
#include <memory>
#include <utility>
struct A {
A(int&& n) { std::cout << "rvalue overload, n=" << n << "\n"; }
A(int& n) { std::cout << "lvalue overload, n=" << n << "\n"; }
};
template<class T, class U>
std::unique_ptr<T> make_unique(U&& u)
{
return std::unique_ptr<T>(new T(std::forward<U>(u)));
}
int main()
{
std::unique_ptr<A> p1 = make_unique<A>(2); // rvalue
int i = 1;
std::unique_ptr<A> p2 = make_unique<A>(i); // lvalue
}
Output:
rvalue overload, n=2
lvalue overload, n=1
Complessità
Constant
Original:
Constant
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
Vedi anche
(C++11) |
ottiene un riferimento rvalue Original: obtains an rvalue reference The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (funzione di modello) |
(C++11) |
ottiene un riferimento rvalue se il costruttore mossa non genera Original: obtains an rvalue reference if the move constructor does not throw The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. (funzione di modello) |