はい、その場合、わざを使用しても何の不利益もありません。コピー可能なオブジェクトはすべて自動的に移動可能であるため、問題ありません。実際、整数であっても、可能であれば常に変数を移動することを推奨する人もいます。
別の方法として、この回答で説明されているように、完全転送の使用を検討できます。
template <typename T2>
foo(T2&& t) : m_t(std::forward<T2>(t)) {}
が fast move コンストラクターを定義していることがわかっている場合T
、それは問題ではありません。foo(const T&)
それ以外の場合は、不要なコピーを避けるために、コンストラクターを提供することをお勧めします。
完全転送は、それを実現するための 1 つの手法にすぎません。もちろん、コンストラクタを書き出す Pubby のソリューションも問題foo(const T&)
ありません。foo(T&&)
結果は同じですが、主にスタイルの問題です。
小さな整数型についても質問しました。理論的には、参照渡しはコピーよりも遅くなりますが、コンパイラはそれをコピーに最適化できるはずです。違いはないと思います。
T
したがって、巨大になる可能性があり、高速な移動コンストラクターを提供しない最悪のケースを最適化することをお勧めします。参照渡しはそのような状況に最適であり、一般的に悪い選択ではありません。