2016-07-14 6 views
12

は、転送、参照引数を指定して、次のテンプレート関数インタフェースをご検討ください。 fがそのパラメータを変更しないことをどのように表現できますか?転送参照のconstnessを表現するにはどうすればよいですか?この場合、</p> <pre><code>template<typename T> void f(T&& t) { ... } </code></pre> <p><code>f</code>のいずれか<code>f</code>の引数のタイプに応じて、左辺値参照、または右辺値参照を取ります

template<typename T> 
void f(const T&& t) { ... } 
+0

「f」はありません。 –

答えて

34

私はfはそのパラメータを変更しないことを表現することができますどのように:それはもはやfに左辺値参照を渡すことができますので、以下の素朴なアプローチは、動作しませんか?

この関数がパラメータを変更しない場合、転送参照を使用する利点はありません。 引数が左辺値または右辺値であるかどうかを考慮する他の関数にパラメータを代入したい場合は(lvaluesおよびrvaluesに別々のオーバーロードがあり、より効率的になる可能性があるためです) )。

関数が引数を変更しない場合は、左辺値または右辺値があるかどうかを気にする必要はないため、無条件でconst T&を使用できます。これは左辺値と右辺値の両方にバインドでき、パラメータを変更しないことを約束します。

template<typename T> 
void f(const T& t) { ... } 
関連する問題