2017-09-18 2 views
-2

Bitte beachten Sie die nächste Klasse. Wird hier std::forward benötigt?Brauche ich std :: forward?

class Class1 
{ 
public: 
    using ContainerT = std::map<Key,Value>; 
public: 
    static ContainerT const& vibrometers(){ 
     return vibrometers_(); // std::forward? 
    } 
protected: 
    static ContainerT & vibrometers_(){ 
     static ContainerT vibrometers__; // no duplicate declaration in cpp 
     return vibrometers__; 
    } 
} 
+7

Warum glaubst du, würdest du 'std :: forward' hier brauchen? – NathanOliver

+2

Sie sagen uns. Gibt es * Weiterleitungen * in Ihrer Klasse? – StoryTeller

+2

Also, um es zu buchstabieren: nein. Sie können keine Rvalue-Referenzen weiterleiten. Du gibst konstante Referenzen zurück. – sehe

Antwort

2

A forward ist eine bedingte Bewegung (es ist ein Schritt, der in iff <> geben Typ ein Wert oder rvalue Referenz).

Es gibt keine Umstände, in denen Sie eine ContainerT auf dieser Linie verschieben.

Sie sollten also nicht forward.

Dies bedeutet nicht, dass alle bedingten Züge vorwärts sein sollten, aber es gibt sehr wenige bedingte Züge, die nicht vorwärts sein sollten.