1

かなり単純な質問。エラー、例外、ユーザーメッセージはどこに保存すればよいですか?これまでのところ、私は常に、呼び出される関数内でローカル文字列を宣言し、気にしませんでした。例えば

SomeClass::function1(...)
{
std::string str1("message1");
std::string str2("message2");
std::string str3("message3");
...
// some code
...
}

突然、構築と初期化が毎回呼び出され、かなりの費用がかかる可能性があることに気付きました。それらを静的文字列としてクラスに保存したり、別のモジュールに保存したりする方がよいでしょうか?ここではローカリゼーションは当てはまりません。

前もって感謝します。

4

2 に答える 2

5

必要なときに文字列定数を使用しないのはなぜですか?

SomeClass::function1(...)
{
/* ... */
    throw std::runtime_error("The foo blortched the baz!");
/* ... */
}

または、sを使用することもできますstatic const std::stringstd::stringこれは、それらを他の多くのにコピーする予定であり、C++実装がコピーオンライトを実行する場合に適しています。

SomeClass::function1(...)
{
    static const std::string str_quux("quux"); // initialized once, at program start
    xyz.someMember = str_quux; // might not require an allocation+copy
}

これらstringのコピーを大量に作成する予定で、コピーオンライトがない(またはコピーオンライトが存在することに依存できない)場合は、boost::flyweightの使用を検討することをお勧めします。

于 2009-08-06T18:56:34.693 に答える
1

TBHは、エラーメッセージが必要な場合にのみ作成するのがおそらく最善です(つまり、何かがひどくうまくいかない場合は、速度が低下しても気になります)。メッセージが常に表示される場合は、毎回初期化されるという事実を回避するために、静的にメッセージを定義するのがおそらく最善です。ただし、一般的には、デバッグモードでのみユーザーメッセージを表示するため、パフォーマンスビルドを実行しようとしている場合は、ユーザーメッセージを表示しないのは非常に簡単です。次に、必要な場合にのみそれらを作成します。

于 2009-08-06T18:58:33.113 に答える