2

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

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

例如假设声明

void do_something_with_string(const std::string &);

可以防止多余的堆复制"abc"

如果是这样,它会在不必要的情况下使用const char包装器吗?boost::crefboost::const_string

4

1 回答 1

3

你不能像那样移动数据。const_string重载的原因const char*是因为const_stringis const。它的设计是不可变的。因此,它可以存储通过引用也是不可变的常量字符串,例如const char*: 字符串文字。

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

于 2011-10-03T21:27:36.900 回答