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
吗?
答案 0 :(得分:3)
您无法移动此类数据。 const_string
导致const char*
重载的原因是因为const_string
是 const 。它的设计是不变的。因此,它可以存储通过引用不可变的常量字符串,如const char*
:字符串文字。
std::string
不是一成不变的。即使您只在const&
期间保持它的整个生命周期,它仍然不是一个不可变的字符串。因此,它必须从const char*
复制到它自己的私有缓冲区。