C++Inoltro perfetto


Osservazioni

L'inoltro perfetto richiede l' inoltro dei riferimenti per preservare i qualificatori di riferimento degli argomenti. Tali riferimenti appaiono solo in un contesto dedotto . Questo è:

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
}

Quanto segue non implica un inoltro perfetto, perché T non è dedotto dalla chiamata del costruttore:

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

C ++ 17 consentirà la deduzione degli argomenti del modello di classe. Il costruttore di "a" nell'esempio precedente diventerà un utente di un riferimento di inoltro

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

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

Inoltro perfetto Esempi correlati