私は、C++ アプリケーションで次のような文字列を渡すことに慣れています。
void foo(const std::string& input)
{
std::cout << input.size() << std::endl;
}
void bar()
{
foo("stackoverflow");
}
今、文字列を NULL にしたい場合があります:
void baz()
{
foo("stackoverflow");
foo(NULL); // very bad with foo implementation above
}
次のように変更できますfoo
。
void foo(const std::string* input)
{
// TODO: support NULL input
std::cout << input->size() << std::endl;
}
しかし、文字列リテラルを渡すか、 achar*
をその実装にコピーするには、次のfoo
ように記述する必要があります。
void bar()
{
string input("hi"); // annoying temporary
foo(&input);
foo(NULL); // will work as long as foo handles NULL properly
}
std::string
プロパティを継承して追加することを考え始めましnull
たが、それが良い考えかどうかはわかりません。NULL になる可能性のあるパラメーターには単純にconst char*
文字列を使用する方がよいかもしれませんが、メモリを自分で管理せずに文字列 (または NULL) のコピーを保存したい場合はどうすればよいでしょうか? ( C スタイルの文字列を使用することの欠点は何ですか?などを参照してください。)
賢い解決策はありますか?