सच कहूं, मैं अगर एक चर या तो const
है या नहीं, अगर तुलना में इसे बदल सकते हैं भ्रामक लगता है यह कम।
इस पर थोड़ा विस्तार से बता दें: कारण आप आमतौर पर इस वजह से आप एक const
चर मनचाहे तरीके से शुरू नहीं किया जा सकता है करना चाहते हैं। std::vector
इसका एक अच्छा उदाहरण है।
const std::vector<int> cvi = { 1, 2, 3, 4, 5, 42 };
हाथ में है, और भी प्रकार है कि इस आरंभीकरण वाक्य रचना की अनुमति नहीं देने के साथ हालांकि, यहां तक सी ++ 1x 'सामान के बिना, आप कर सकते हैं: ठीक है, एक बार के लिए, अगले मानक एक सार्वभौमिक प्रारंभ वाक्य रचना कि यह संभव बनाता है का परिचय हमेशा एक सहायक समारोह बनाने तुम क्या चाहते करने के लिए:
const std::vector<int>& cvi = create_my_vector();
या, यदि आप कल्पना होना चाहते हैं:
const std::vector<int>& cvi = compile_time_list<1,2,3,4,5,42>::create_vector();
नोट &
। फ़ंक्शन कॉल के परिणाम की प्रतिलिपि बनाने में कोई बात नहीं है, क्योंकि const
संदर्भ में एक रावल्यू बाध्यकारी संदर्भ के जीवनकाल के अंत तक अपना जीवनकाल बढ़ाता है।
बेशक, सी ++ 1 एक्स 'मूव सेमेन्टिक्स का समर्थन करने वाले एक कंपाइलर के साथ पुन: संकलन करना इस तरह के अनुकूलन को बहुत अधिक आवश्यक प्रदान करेगा। लेकिन एक const
संदर्भ में एक rvlaue बाध्यकारी अभी भी एक वेक्टर को स्थानांतरित करने से तेज हो सकता है और धीमी होने की संभावना नहीं है।
सी ++ 1x के साथ, आप इसे एक फ्लाई करने वाले लैम्ब्डा फ़ंक्शन भी बना सकते हैं। सी ++ सिर्फ औजारों का एक अविश्वसनीय रूप से विशाल शस्त्रागार प्रदान करता है। आईएमई, कोई फर्क नहीं पड़ता कि आपने कितना मुश्किल सोचा है, किसी और को एक ही काम करने के लिए एक और विचार के साथ आना चाहिए। और अक्सर आपके से बेहतर एक।
हालांकि, आईएमई यह समस्या आमतौर पर बहुत कम कार्यों में बहुत अधिक कोड के साथ आता है। और फिर यह न केवल स्थिरता पर लागू होता है, बल्कि समान लक्षणों के लिए भी - जैसा कि संदर्भ संदर्भित करता है।
एक क्लासिक उपयोग-एक-कई-संभव-धाराओं का उपयोग करता है।इस
int main(int argc, char* argv[])
{
std::istream* istrm = NULL;
std::ifstream ifs;
if(argc > 1)
{
ifs.open(argv[1]);
if(ifs.good())
istrm = &ifs;
}
if(!istrm)
istrm = &std::cin;
while(istrm->good())
{
// reading from *istrm implemented here
}
return 0;
}
के बजाय सिर्फ और 1 में चिंताओं को विभाजित) पता लगाना है, जहां से पढ़ने के लिए 2) वास्तविक पढ़ने:
int read(std::istream& is)
{
while(is.good())
{
// reading from is implemented here
}
return 0;
}
int main(int argc, char* argv[])
{
if(argc > 1)
{
std::ifstream ifs(argv[1]);
if(ifs.good())
return read(ifs);
}
return read(std::cin);
}
मैं अभी तक एक चर के एक वास्तविक दुनिया उदाहरण देखना है जो उतना स्थिर नहीं था जितना वह हो सकता था जिसे चिंताओं को अलग करके तय नहीं किया जा सका।
क्या होता है यदि आप केवल एक शाखा में v को बनाते हैं तो? –
तो शायद यह उस दायरे में केवल 'const' होना चाहिए। – Frank
नहीं। यह समझ में नहीं आता है। –