我已經習慣了周圍的字符串傳遞這樣在我的C++應用程序: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
屬性,但我不太相信這是一個好主意。也許最好簡單地將const char*
字符串用於可以爲NULL的參數,但如果我想保存字符串(或NULL)的副本而不必自己管理其內存,該怎麼辦? (請參閱What are some of the drawbacks to using C-style strings?等)
任何巧妙的解決方案?
爲什麼你想要一個NULL?足夠了? – Tim 2008-12-04 19:33:46
@Tim:也許吧。它會使我無需始終檢查這些參數是否爲NULL,並使用empty()來檢查「無值」。 – 2008-12-04 19:44:24
重新引入NULL是假的。如果你需要可怕的NULL指針,爲什麼你首先使用引用?實際上使用引用的一個最重要的原因是你可以確定它不是NULL。 – Thorsten79 2008-12-04 22:03:26