मैं अपने C++ अनुप्रयोग में इस तरह स्ट्रिंग के आसपास पारित करने के लिए प्रयोग किया जाता है:सी ++ स्ट्रिंग है जो शून्य हो सकता है
void baz()
{
foo("stackoverflow");
foo(NULL); // very bad with foo implementation above
}
:
void foo(const std::string& input)
{
std::cout << input.size() << std::endl;
}
void bar()
{
foo("stackoverflow");
}
अब मैं एक मामले में जहां मैं स्ट्रिंग शून्य होना चाहते है
मैं करने के लिए foo
को बदल सकता है:
void foo(const std::string* input)
{
// TODO: support NULL input
std::cout << input->size() << std::endl;
}
लेकिन एक स्ट्रिंग शाब्दिक पारित करने के लिए या एककॉपी foo
की कि कार्यान्वयन के लिए 0 मैं कुछ इस तरह लिखने की ज़रूरत:
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*
स्ट्रिंग का उपयोग करना बेहतर हो जो कि नल हो सकता है, लेकिन अगर मैं स्ट्रिंग (या न्यूल) की एक प्रति सहेजने के बिना अपनी याददाश्त को सहेजना चाहता हूं तो क्या होगा? (What are some of the drawbacks to using C-style strings? आदि देखें)
आसपास के किसी भी चालाक समाधान?
आप एक पूर्ण क्यों चाहते हैं? काफी है? – Tim
@Tim: शायद। यह मुझे हमेशा के लिए उन पैरामीटर की जांच करने से बचाएगा, और मैं "कोई मूल्य" की जांच करने के लिए खाली() का उपयोग नहीं करता। –
न्यूल पुन: प्रस्तुत करना फर्जी है। यदि आपको भयानक नल पॉइंटर की आवश्यकता है तो आप पहली जगह संदर्भों का उपयोग क्यों कर रहे हैं? असल में संदर्भों का उपयोग करने के सबसे महत्वपूर्ण कारणों में से एक यह है कि आप सुनिश्चित कर सकते हैं कि यह पूर्ण नहीं है। – Thorsten79