मुझे बस एक और मूर्खतापूर्ण litb पोस्ट की आवश्यकता महसूस हुई।
string str1 = "foo";
कॉपी-प्रारंभ कहा जाता है, क्योंकि जो संकलक करता है, अगर यह किसी भी temporaries छिपाना नहीं करता है, यह है:
string str1(string("foo"));
जाँच है कि रूपांतरण इस्तेमाल किया निर्माता निहित है बगल में। वास्तव में, सभी अंतर्निहित रूपांतरण मानक प्रारंभिकरण के संदर्भ में मानक द्वारा परिभाषित किए जाते हैं। ऐसा कहा जाता है कि टाइप यू से टाइप टी में एक अंतर्निहित रूपांतरण मान्य है, यदि
T t = u; // u of type U
मान्य है।
constrast में,
string str1("foo");
कर रही है वास्तव में क्या लिखा है, और प्रत्यक्ष प्रारंभ कहा जाता है। यह स्पष्ट रचनाकारों के साथ भी काम करता है।
वैसे, आप का उपयोग करके temporaries की eliding निष्क्रिय कर सकते हैं -fno-छिपाना-कंस्ट्रक्टर्स:
-fno-elide-constructors
The C++ standard allows an implementation to omit creating a temporary which
is only used to initialize another object of the same type. Specifying this
option disables that optimization, and forces G++ to call the copy constructor
in all cases.
स्टैंडर्ड कहते हैं वहाँ व्यावहारिक रूप से
T a = u;
और बीच कोई अंतर नहीं
T a(u);
यदि टी और आपके प्रकार का आदिम प्रकार हैं। तो आप दोनों रूपों का उपयोग कर सकते हैं। मुझे लगता है कि यह सिर्फ इसकी शैली है जो लोगों को दूसरे के बजाय पहले फॉर्म का उपयोग करती है।
कुछ लोगों को कुछ स्थिति में पहले उपयोग कर सकते हैं, क्योंकि वे घोषणा को स्पष्ट करना चाहते हैं:
T u(v(a));
एक चर u
की एक परिभाषा है कि की एक अस्थायी का उपयोग कर के रूप में आरंभ नहीं हो जाता किसी को देखने के migh एक प्रकार v
जो उसके निर्माता के लिए पैरामीटर प्राप्त करता है जिसे a
कहा जाता है। लेकिन वास्तव में, क्या संकलक कि के साथ करता है यह है:
T u(v a);
यह एक समारोह घोषणा उस प्रकार v
का एक तर्क एक पैरामीटर a
कहा जाता है के साथ लेता है, और बनाता है। ताकि लोगों को,
T u = v(a);
कि स्पष्ट करने के लिए क्या करना भले ही वे
T u((v(a)));
भी कर सकते थे, क्योंकि वहाँ कभी नहीं कर रहे हैं फ़ंक्शन पैरामीटर आसपास कोष्ठकों, संकलक एक के बजाय एक चर परिभाषा के रूप में यह लिखा होगा समारोह घोषणा भी :)
से विरासत में मिला है! हां, यह होगा: सी में, = ऑपरेटर एकमात्र तरीका था, इसलिए यह अभी भी पुरानी टाइमर को "सही लगता है"। धन्यवाद। –