मुझे सी ++ 11 में auto
पसंद है। यह अद्भुत है। - सी ++ काफी छोटे विसंगतियों और कोना हैऑटो एक्स {3} प्रारंभिकज़र_सूची क्यों कम करता है?
int i = 3; // i is an int with value 3
int i = int{3}; // i is an int with value 3
int i(3); // i is an int with value 3 (possibly narrowing, not in this case)
int i{3}; // i is an int with value 3
auto i = 3; // i is an int with value 3
auto i = int{3}; // i is an int with value 3
auto i(3); // i is an int with value 3
auto i{3}; // wtf, i is a std::initializer_list<int>?!
यह अजीब व्यवहार नए लोगों के लिए भ्रामक है, और कष्टप्रद अनुभवी उपयोगकर्ताओं के लिए: लेकिन यह एक विसंगति है कि वास्तव में क्योंकि मैं इस पर सब समय यात्रा, मेरी नसों पर हो जाता है है ऐसे मामलों को जिन्हें किसी को ध्यान में रखना है। क्या कोई यह समझा सकता है कि मानक समिति ने इस मामले में एक नया परिचय देने का फैसला क्यों किया?
मैं यह समझ सकता है अगर प्रकार std::initializer_list
के एक चर घोषित कुछ है कि उपयोगी था या अक्सर किया, लेकिन मेरे अनुभव में यह लगभग कभी जानबूझकर है था -
std::initializer_list<int> l{3};
auto l = std::initializer_list<int>{3};
auto l = {3}; // No need to specify the type
ठीक काम करेगा। तो auto x{i}
के लिए विशेष मामले के पीछे क्या कारण है?
यह बहुत अधिक है कि [नियम बदलने जा रहा है] (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n3922.html)। –
संबंधित: http://stackoverflow.com/q/17582667 – dyp
समाधान: उन मामलों में से किसी के लिए ऑटो का उपयोग न करें (# 2 को छोड़कर)। :-) – dlf