const参照引数
以下の関数呼び出しはコンパイルエラーにも実行時エラーにもなりません
template<typename T> T add(const T& x,const T& y) { return x+y; } int main() { auto a = add(10,11); //rvalue渡し }
lvalue引数にrvalueを渡しているのだから
エラーになりそうなものですが
T const&
(あるいはconst T&
)のようなconst参照型引数
であれば
一次変数でも渡して問題ないようでした
(constの無い普通の参照型引数
だとコンパイヨ時に怒られます)
std::string const&引数
に文字リテラルを渡したときでも同様の効果が
あることは知っていたのですが、const参照型引数
全般に
そのような効果があることは、今しがた知りました
ちなみに、処理時間を比較するとmove-semanticsを使用したほうが速いようです
http://melpon.org/wandbox/permlink/qyvwCFXZ5zRf33sr
(微々たる物でしたが)