在C ++字符串构造中移动语义和R值引用

时间:2011-10-03 21:18:34

标签: string optimization c++11 rvalue-reference move-semantics

C ++ 11是否会在参数字符串结构中移动语义和r值引用,例如

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

假设声明为例

void do_something_with_string(const std::string &);

可以防止"abc"

的冗余堆复制

如果是这样,它会使用const char不必要的boost::cref包装boost::const_string吗?

1 个答案:

答案 0 :(得分:3)

您无法移动此类数据。 const_string导致const char*重载的原因是因为const_string const 。它的设计是不变的。因此,它可以存储通过引用不可变的常量字符串,如const char*:字符串文字。

std::string不是一成不变的。即使您只在const&期间保持它的整个生命周期,它仍然不是一个不可变的字符串。因此,它必须从const char*复制到它自己的私有缓冲区。