2

C++11 は、次のような引数文字列構造のセマンティクスと右辺値参照を移動しますか?

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

たとえば、仮定宣言

void do_something_with_string(const std::string &);

の冗長なヒープコピーを防止できるようにし"abc"ます。

もしそうなら、それは不必要にconst charラッパーboost::crefを利用しboost::const_stringますか?

4

1 に答える 1

3

そのようなデータを移動することはできません。その理由には、 is constのためのconst_stringオーバーロードがあります。それはその設計によって不変です。したがって、 : a 文字列リテラルのように、参照によって不変でもある定数文字列を格納できます。const char*const_stringconst char*

std::string不変ではありません。const&寿命が尽きるまで保持したとしても、それは不変の文字列ではありません。const char*したがって、 から独自のプライベート バッファにコピーする必要があります。

于 2011-10-03T21:27:36.900 に答える