我习惯于在我的 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;
}
但是要传递字符串文字或将 a 复制char*
到该实现,foo
我需要编写如下内容:
void bar()
{
string input("hi"); // annoying temporary
foo(&input);
foo(NULL); // will work as long as foo handles NULL properly
}
我开始考虑继承std::string
和添加一个null
属性,但我不太确定这是一个好主意。也许const char*
对可以为 NULL 的参数简单地使用字符串会更好,但是如果我想保存字符串(或 NULL)的副本而不必自己管理其内存怎么办?(请参阅使用 C 样式字符串有哪些缺点?等)
有什么聪明的解决方案吗?