Looking for c++ Keywords? Try Ask4Keywords

C++Perfekte Weiterleitung


Bemerkungen

Eine einwandfreie Weiterleitung erfordert Weiterleitungsreferenzen , um die Ref-Qualifier der Argumente zu erhalten. Solche Verweise erscheinen nur in einem abgeleiteten Kontext . Das ist:

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
}

Folgendes beinhaltet keine perfekte Weiterleitung, da T nicht vom Konstruktoraufruf abgeleitet wird:

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

In C ++ 17 können Klassenvorlagenargumente abgezogen werden. Der Konstruktor von "a" im obigen Beispiel wird Benutzer einer Weiterleitungsreferenz

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

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

Perfekte Weiterleitung Verwandte Beispiele