3

const string&たとえば、入力として取得する関数があるとします。

void foo(const string& s);

そしてconst char* buffer;、サイズがわかっている内部バッファーがあります。

文字列をインラインで作成すると、まだ 1 つのコピーが発生すると思います。

foo(string(buffer, n));

しかし、すべてが一定であるため、バッファをコピーする必要はありません。文字列クラスが作成するバッファではなく、文字列クラスの機能が必要なだけです。

コピーが発生するかどうかはわかりませんが、文字列のコンストラクターを見ると、すべてがコピーが発生すると言いました。コンパイラの最適化がそのような状況を理解できるかどうかはわかりませんし、コピーが行われたかどうかを確認する方法を見つけることができませんでした。

文字列に外部バッファを使用する方法はありますか、または少なくともコピーが行われるかどうかを確認する方法はありますか。現在、std 文字列と c++11 を使用しています。

4

2 に答える 2