सी में पर विभिन्न परिणामों पर ले जाया जाता कोष्ठकों ++ यह int (x) = 0;
तरह कोष्ठकों के अंदर चर घोषित करने के लिए संभव है। लेकिन ऐसा लगता है कि अगर आप चर नाम के बजाय this
उपयोग करते हैं, तो निर्माता के बजाय प्रयोग किया जाता है: A (this);
कॉल A::A(B*)
। तो पहला सवाल क्यों यह this
के लिए अलग है, ऐसा इसलिए है क्योंकि चर this
नामित नहीं किया जा सकता है? और मामलों थोड़ा की सुविधा देता है एक लैम्ब्डा के अंदर this
डाल जटिल -नाम के साथ `this` अंदर लैम्ब्डा घोषणा वेरिएबल के अंदर 3 अलग compilers
struct B;
struct A
{
A (B *) {}
};
struct B
{
B()
{
[this] { A (this); }();
}
};
अब जीसीसी कॉल A::A(B*)
, डिफ़ॉल्ट निर्माता और बजना प्रिंट लापता के बारे में MSVC प्रिंट त्रुटि expected expression
(https://godbolt.org/g/Vxe0fF)। यह MSVC में भी मजेदार है - यह वास्तव में नाम this
साथ वैरिएबल का उपयोग कर सकते हैं बनाता है, इसलिए यह निश्चित रूप से एक बग (https://godbolt.org/g/iQaaPH) है। कौन सा कंपाइलर सही है और इस तरह के व्यवहार के कारण क्या हैं?
'this' एक आरक्षित पहचानकर्ता है, आप इसे की घोषणा नहीं कर सकते हैं। –
@ एनएम। हां, प्रश्न यह है कि क्या होने वाला है - 'यह' आरक्षित –
के कारण कन्स्ट्रक्टर या कंपाइलर त्रुटि को कॉल करना मुझे नहीं लगता कि ए (यह) ए (5) से अलग कैसे है। –