2017-09-18 6 views
-2

次のクラスを考慮してください。 std::forwardが必要ですか?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

ここで 'std :: forward'が必要なのはなぜですか? – NathanOliver

+2

あなたに教えてください。あなたのクラスに*の転送*参照がありますか? – StoryTeller

+2

それで、スペルアウトするには:いいえ。右辺値の参照を転送する可能性はありません。あなたはconst参照を返しています。 – sehe

答えて

2

forwardは条件動きは(それが<>渡されたタイプIFF移動値または右辺値参照)です。

ContainerTをその行に移動する状況はありません。

だから、あなたはforwardではありません。

これはすべての条件付き移動が転送であることを意味するものではありませんが、転送ではならない条件付きの移動はほとんどありません。

関連する問題