2011-10-03 47 views
1

請問C++ 11移動語義和r值的引用在參數字符串構建體如移動語義和R-值參考在C++字符串施工

do_something_with_string(std::string("abc")) 

假設聲明例如

void do_something_with_string(const std::string &); 

可以防止冗餘堆複製​​?

如果是的話,它會利用const char包裝boost::crefboost::const_string unneccesary?

+1

「請問C++ 11移動語義和r值引用(...)」好像你忘了你問題中的r值引用! –

+0

固定標題。謝謝 –

回答

3

你不能移動那樣的數據。原因const_stringconst char*的超負荷是因爲const_string常數。它的設計是不變的。因此,它可以存儲常量字符串,這些字符串也是通過引用不可變的,如const char*:字符串文字。

std::string不是不可變的。即使你在整個生命週期中只持有它const&,它仍然不是一個不可變的字符串。因此,它必須從const char*複製到它自己的專用緩衝區中。