Avatar ·

C++11 और नए में लिस्ट इनिशियलाइज़ेशन (कर्ली ब्रेसेज़) के लाभ

सभी को नमस्कार! मैंने C++11 सीखना शुरू किया है और एक नई सुविधा पर ध्यान गया — कर्ली ब्रेसेज़ के साथ इनिशियलाइज़ेशन (list initialization)। उदाहरण के लिए:\n\n```cpp\nstd::vector v = {1, 2, 3};\nint x{0};\n```\n\nयह सब काम करता है, लेकिन मुझे समझ नहीं आता कि इसकी क्या ज़रूरत है, जबकि पुरानी अच्छी राउंड ब्रेसेज़ या असाइनमेंट ऑपरेटर के साथ इनिशियलाइज़ेशन पहले से मौजूद है। मुझे लगता है कि यह सिर्फ सिंटैक्टिक शुगर है।\n\nलेकिन मैंने सुना है कि कर्ली ब्रेसेज़ कुछ समस्याओं को हल करते हैं। उदाहरण के लिए, मैंने पढ़ा कि वे नैरोइंग कन्वर्ज़न (narrowing conversions) को रोकते हैं। लेकिन यह क्या है? और इसके और क्या लाभ हैं?\n\nमेरे पास एक विशिष्ट उदाहरण है जो मुझे भ्रमित करता है:\n\n```cpp\nint a = 3.14; // a == 3, बस फ्रैक्शनल पार्ट खो जाता है\nint b(3.14); // वही बात\nint c{3.14}; // कम्पाइलेशन एरर! क्यों?\n```\n\nमैं समझता हूँ