यहाँ C ++ कोड का एक टुकड़ा।
इस उदाहरण में, कई कोड ब्लॉक कंस्ट्रक्टर कॉल की तरह दिखते हैं। दुर्भाग्य से, ब्लॉक कोड # 3 नहीं है (आप इसे https://godbolt.org/z/q3rsxn का उपयोग करके जांच सकते हैं और https://cppinsights.io )।
मुझे लगता है, यह एक पुराना C ++ संकेतन है और यह {} (cf # 4) का उपयोग करके नए C ++ 11 निर्माण संकेतन की शुरूआत की व्याख्या कर सकता है।
क्या आपके पास T(i)अर्थ के लिए स्पष्टीकरण है, इसलिए एक निर्माण संकेतन के करीब है, लेकिन निश्चित रूप से इतना अलग है?
struct T {
T() { }
T(int i) { }
};
int main() {
int i = 42;
{ // #1
T t(i); // new T named t using int ctor
}
{ // #2
T t = T(i); // new T named t using int ctor
}
{ // #3
T(i); // new T named i using default ctor
}
{ // #4
T{i}; // new T using int ctor (unnamed result)
}
{ // #5
T(2); // new T using int ctor (unnamed result)
}
}
NB: इस प्रकार, T(i)(# 3) के बराबर है T i = T();
-Wallऔर आपको " warning: parentheses were disambiguated as redundant parentheses around declaration of variable named 'i' [-Wvexing-parse]" क्लैंग से, या जीसीसी से थोड़ा कम प्रेरित " warning: unnecessary parentheses in declaration of 'i' [-Wparentheses]" मिलता है ।
T t()) लेकिन इतनी सरल घोषणा अभिव्यक्तियों के लिए नहीं। यकीन के लिए, यह अप्रिय हो सकता है ।