मैं निम्नलिखित है टेम्पलेट समारोह:std :: startizer_list <int> ({1,2,3}) और {1,2,3} के बीच क्या अंतर है?
template<typename T> void foo2(T t) {}
मुझे पता है कि मैं का उपयोग कर इसे फोन नहीं कर सकते हैं:
foo2({1,2,3});
क्योंकि प्रारंभकर्ता सूची एक टेम्पलेट तर्क के लिए एक गैर deduced संदर्भ है। मैं का उपयोग करना होगा:
foo2<std::initializer_list<int>>({1,2,3});
लेकिन मैं यह भी उपयोग कर सकते हैं: {1,2,3}
और std::initializer_list<int>({1,2,3})
:
foo2(std::initializer_list<int>({1,2,3}));
जो मुझे आश्चर्य है कि क्या बीच का अंतर है बनाता है?
'std :: startizer_list ({1,2,3}) 'टाइप' std :: startizer_list 'की अभिव्यक्ति है। '{1,2,3}' अभिव्यक्ति नहीं है। ब्रेस्ड सूची केवल संदर्भों में हो सकती है कि भाषा परिभाषा स्पष्ट रूप से इसे अनुमति देती है, न कि अभिव्यक्ति हो सकती है। –
@ एम.एम. जब आप 0 उत्तरों के साथ किसी प्रश्न का उत्तर जानते हैं, लेकिन फिर, यह टिप्पणियों में इसका उत्तर देता है। (͡ ° ʖ̯ ͡ °) – luk32
@ luk32 एक उत्तर लिखने के लिए स्वतंत्र महसूस करें ... मुझे लगता है कि एक पूर्ण उत्तर टेम्पलेट के विवरण को कवर करना चाहिए जो मुझे –