我习惯在我的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;
}
但是要将字符串字面量传递或将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
属性,但我不确定这是否是一个好主意。也许更好的方法是对于可以为NULL的参数,仅使用const char*
字符串,但如果我想保存一个字符串(或NULL)的副本而不必自己管理其内存怎么办?(参见使用C风格字符串有哪些缺点?等)
有没有什么聪明的解决方案?