C++Reenvío perfecto


Observaciones

El reenvío perfecto requiere reenviar las referencias para preservar los ref-calificadores de los argumentos. Tales referencias aparecen solo en un contexto deducido . Es decir:

template<class T>
void f(T&& x) // x is a forwarding reference, because T is deduced from a call to f()
{
    g(std::forward<T>(x)); // g() will receive an lvalue or an rvalue, depending on x
}

Lo siguiente no implica un reenvío perfecto, porque T no se deduce de la llamada del constructor:

template<class T>
struct a
{
    a(T&& x); // x is a rvalue reference, not a forwarding reference
};
C ++ 17

C ++ 17 permitirá la deducción de argumentos de plantilla de clase. El constructor de "a" en el ejemplo anterior se convertirá en un usuario de una referencia de reenvío

a example1(1);
  // same as a<int> example1(1);

int x = 1;
a example2(x);
  // same as a<int&> example2(x);

Reenvío perfecto Ejemplos relacionados