सूची आरंभीकरण का उपयोग करने के लाभों के बारे में पहले से ही महान जवाब हैं, हालांकि मेरे अंगूठे का व्यक्तिगत नियम जब भी संभव हो घुंघराले ब्रेसिज़ का उपयोग नहीं करना है, लेकिन इसके बजाय यह वैचारिक अर्थ पर निर्भर करता है:
- यदि मैं जिस वस्तु का निर्माण कर रहा हूं, वह कंस्ट्रक्टर (जैसे कंटेनर, पीओडी स्ट्रक्चर, एटॉमिक्स, स्मार्ट पॉइंटर्स इत्यादि) में गुजरने वाले मूल्यों को धारण करता है, तो मैं ब्रेसिज़ का उपयोग कर रहा हूं।
- अगर कंस्ट्रक्टर एक सामान्य फ़ंक्शन कॉल जैसा दिखता है (यह कुछ अधिक या कम जटिल ऑपरेशन करता है जो तर्कों द्वारा पैरामीट्रिक किए जाते हैं) तो मैं सामान्य फ़ंक्शन कॉल सिंटैक्स का उपयोग कर रहा हूं।
- डिफ़ॉल्ट आरंभीकरण के लिए मैं हमेशा घुंघराले ब्रेसिज़ का उपयोग करता हूं।
एक के लिए, इस तरह से मुझे हमेशा यकीन है कि वस्तु चाहे वह उदाहरण के लिए "वास्तविक" वर्ग हो, चाहे वह किसी भी रूप में या एक बिल्डिन / पीओडी प्रकार के साथ एक "वास्तविक" वर्ग हो, चाहे वह प्रारंभिक हो। दूसरा यह है - ज्यादातर मामलों में - पहले नियम के अनुरूप, एक डिफ़ॉल्ट प्रारंभिक वस्तु अक्सर एक "खाली" वस्तु का प्रतिनिधित्व करती है।
मेरे अनुभव में, इस नियम को डिफ़ॉल्ट रूप से घुंघराले ब्रेसिज़ का उपयोग करने की तुलना में बहुत अधिक लगातार लागू किया जा सकता है, लेकिन स्पष्ट रूप से सभी अपवादों को याद रखना जब उनका उपयोग नहीं किया जा सकता है या लघुकोष्ठक के साथ "सामान्य" फ़ंक्शन-कॉल सिंटैक्स से अलग अर्थ हो सकता है। (एक अलग अधिभार कहते हैं)।
यह उदाहरण के लिए मानक पुस्तकालय प्रकारों के साथ अच्छी तरह से फिट बैठता है std::vector
:
vector<int> a{10,20}; //Curly braces -> fills the vector with the arguments
vector<int> b(10,20); //Parentheses -> uses arguments to parametrize some functionality,
vector<int> c(it1,it2); //like filling the vector with 10 integers or copying a range.
vector<int> d{}; //empty braces -> default constructs vector, which is equivalent
//to a vector that is filled with zero elements
auto
?