0

私のプログラムで作成された std::wstring のオブジェクトはたくさんありますが、

std::wstring mystr(L"test string");

入力 wchar 文字列は文字列定数であるため、mystr が L"test string" のアドレスに等しい mystr.c_str() として構築されている場合、ヒープの使用量をいくらか節約できます。そのような wstring を構築することは可能ですか?

4

2 に答える 2

1

いいえ。そうするために、の実装は文字列リテラルから来たstd::basic_stringかどうかに関する追加情報を必要とし、この情報は単に利用できません。wchar_t const*そして、たとえそうであったとしても、引数が。でなかったとしても、クラスを使用するコストが増加しますwchar_t const*

これらの文字列がグローバルスコープにある場合、それらを構築するためのコストは起動時のみです。そして、それらがローカル変数である場合、いつでも宣言できるstaticので、それらを構築するためのコストは、ブロックに入るたびではなく、一度だけ支払われます。

于 2012-04-12T15:35:10.717 に答える
1

これには確かに有効なユースケースがありますが、C++文字列クラスはそれをサポートしていません。本当に必要な場合は、インターンをサポートする独自の文字列クラスを作成する必要があります。

他のいくつかの言語がこれをネイティブにサポートしていることに注意してください。残念ながら、C ++文字列クラスは、一般的なユースケース(本質的に不変の文字列のコピーの多く)ではなく、かなり特定のユースケース(多くの変更)をカバーしています。

wchar_tタスクを単純化するために、静的メモリ内のバッファの開始と終了を指すことができる(const)イテレータのペアの周りにシンラッパークラスを使用するだけで十分かどうかを検討してください。

于 2012-04-12T15:35:36.470 に答える