看板 C_and_CPP 關於我們 聯絡資訊
開發平台(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
diabloevagto:#19gioP8j 03/24 23:13