作者hpps (hpps)
看板C_and_CPP
標題[問題] 關於C++的Rvalue reference
時間Sun Mar 24 22:19:54 2013
開發平台(Platform): ( G++, Linux, ...)
C++0x有個叫Rvale reference的東西,最近開始研究它。
上網找資料,說這是為了效率而提出的東西。
以下是網路上的例子:
// string的相加
string s1( "s1" );
string s2( "s2" );
string s3 = s1 + s2;
// 上面會呼叫:
string operator+( const string &lhs, const string &rhs )
{
string str( lhs );
str += rhs;
return str;
}
// 以上會產生一個暫時物件str,如果改成利用Rvalue reference,
// 就不會產生暫時物件
string &&operator+( string &&lhs, const string &rhs )
{
lhs += rhs;
return ( string && )lhs;
}
我想問的是,如果我寫
s3 = s1 + s2;
用的是Rvalue reference的版本,那這樣s1不是會被修改到嗎?
如果我不想要s1不被修改( 可能之後會用 ),又不想失去效率,
那該如何寫比較好??
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 218.164.77.208
→ hpps:我不想要s1被修改,上面打錯 03/24 22:21
→ leiyan:接字串operator+不是應該重配空間嗎? 03/24 22:26
→ adxis:s1, s2 都是 lvalue 不會被修改 s1 + s2 產生的才是 rvalue 03/24 22:29
推 ZanFu5566:那就自己寫string concat不就好了0.0 03/24 22:31
推 littleshan:寫 operator=(string&& lhs) 這樣可以少一次複製 03/24 22:34
→ hpps:我是想說,s1被改掉,那這樣跟回傳一般的reference有什麼差? 03/24 22:34