std::forward
De cppreference.com
|
|
This page has been machine-translated from the English version of the wiki using Google Translate.
The translation may contain errors and awkward wording. Hover over text to see the original version. You can help to fix errors and improve the translation. For instructions click here. |
| Definido en la cabecera <utility>
|
||
| template< class T > T&& forward( typename std::remove_reference<T>::type& t ); |
(1) | (desde C++11) |
| template< class T > T&& forward( typename std::remove_reference<T>::type&& t ); |
(2) | (desde C++11) |
Cuando se usa de acuerdo con la siguiente receta en una plantilla de función, reenvía el argumento a otra función exactamente como se lo pasa a la función de llamada .
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)); }
- Si una llamada a
wrapper()pasa unstd::stringvalor p, entonces se deduce aTstd::string(nostd::string&,const std::string&, ostd::string&&), ystd::forwardasegura que un valor p de referencia se pasa 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. - Si una llamada a
wrapper()pasa un conststd::stringlvalue, entonces se deduce aTconst std::string&, ystd::forwardasegura que una referencia const lvalue se pasa afoo.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. - Si una llamada a
wrapper()pasa unstd::stringno constante lvalue, entonces se deduce queTstd::string&ystd::forwardasegura que una referencia no const lvalue se pasa afoo.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.
Contenido |
[editar] Notas
Al intentar reenviar un valor-un valor-como, por ejemplo creando una instancia de la forma 2) con lvalue referencia de tipo T, es un error en tiempo de compilación .
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.
[editar] Parámetros
| t | - | el objeto a ser reenviado
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. |
[editar] Valor de retorno
static_cast<T&&>(t)
[editar] Excepciones
[editar] Ejemplo
Este ejemplo demuestra el reenvío perfecto del parámetro de la make_unique function () con el argumento del constructor de la clase 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 }
Salida:
rvalue overload, n=2 lvalue overload, n=1
[editar] Complejidad
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.
[editar] Ver también
| (C++11) |
obtiene una referencia de valor- 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. (plantilla de función) |
| (C++11) |
obtiene una referencia de valor-si el constructor movimiento no tira 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. (plantilla de función) |

