[問題] 關於C++的Rvalue reference

看板C_and_CPP (C/C++)作者 (hpps)時間13年前 (2013/03/24 22:19), 編輯推噓3(304)
留言7則, 6人參與, 最新討論串1/2 (看更多)
開發平台(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

03/24 22:21, , 1F
我不想要s1被修改,上面打錯
03/24 22:21, 1F

03/24 22:26, , 2F
接字串operator+不是應該重配空間嗎?
03/24 22:26, 2F

03/24 22:29, , 3F
s1, s2 都是 lvalue 不會被修改 s1 + s2 產生的才是 rvalue
03/24 22:29, 3F

03/24 22:31, , 4F
那就自己寫string concat不就好了0.0
03/24 22:31, 4F

03/24 22:34, , 5F
寫 operator=(string&& lhs) 這樣可以少一次複製
03/24 22:34, 5F

03/24 22:34, , 6F
我是想說,s1被改掉,那這樣跟回傳一般的reference有什麼差?
03/24 22:34, 6F

03/24 23:13, , 7F
03/24 23:13, 7F
文章代碼(AID): #1HJmkCMh (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1HJmkCMh (C_and_CPP)