Перемещение семантики и ссылок на R-значения в конструкции строк C ++ - PullRequest
1 голос
/ 04 октября 2011

Будет ли 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 Ответ

3 голосов
/ 04 октября 2011

Вы не можете перемещать данные таким образом.Причина, по которой const_string имеет эту перегрузку для const char*, заключается в том, что const_string равно const .Он неизменен по своему дизайну.Поэтому он может хранить постоянные строки, которые также являются неизменяемыми по ссылке, например const char*: строковый литерал.

std::string не является неизменным.Даже если вы удерживаете его только const& на протяжении всей его жизни, он все равно не является неизменной строкой.Следовательно, он должен скопировать из const char* в собственный закрытый буфер.

...