struct Foo
{
void f()
{
// (*)
}
};
(*) के साथ चिह्नित रेखा में "यह" किस प्रकार का है?सी ++ में "यह" का प्रकार?
क्या यह कॉन्स फू * या Foo * है?
struct Foo
{
void f()
{
// (*)
}
};
(*) के साथ चिह्नित रेखा में "यह" किस प्रकार का है?सी ++ में "यह" का प्रकार?
क्या यह कॉन्स फू * या Foo * है?
n3376 9.3.2/1
एक गैर स्थैतिक के शरीर में (9.3) के सदस्य समारोह, कीवर्ड यह एक prvalue अभिव्यक्ति जिसका मूल्य के लिए वस्तु का पता है जो समारोह कहा जाता है।
के सदस्य फ़ंक्शन में इसका प्रकार एक्स क्लास एक्स * है। यदि सदस्य फ़ंक्शन को कॉन्स घोषित किया जाता है, तो इसका प्रकार कॉन्स एक्स * है, यदि सदस्य फ़ंक्शन अस्थिर घोषित किया गया है, तो इसका प्रकार अस्थिर एक्स * है, और यदि सदस्य फ़ंक्शन कॉन्स्ट अस्थिर घोषित किया गया है, तो इसका प्रकार कॉन्स अस्थिर एक्स * है।
इससे मुझे आश्चर्य होता है कि उन्होंने 'यह' एक कॉन्स्ट पॉइंटर क्यों नहीं बनाया ... कोई विशेष कारण? –
@TomKnapen 'यह' एक आर-वैल्यू है, इसलिए आप इसे किसी भी तरह संशोधित नहीं कर सकते हैं। अधिकांश उद्देश्यों और उद्देश्यों के लिए, यह 'एक्स * कॉन्स' के रूप में व्यवहार करता है। लेकिन आप इसका पता नहीं ले सकते, उदाहरण के लिए। – Angew
@TomKnapen: नहीं। अंतराल में, यह एक संदर्भ होना चाहिए, सूचक नहीं होना चाहिए। लेकिन 'यह' संदर्भों की भविष्यवाणी करता है, और मौजूदा कोड को तोड़ने की सी ++ परंपरा वास्तव में पुरानी नहीं है। – MSalters
this
वर्तमान वस्तु को संदर्भित करता है। सी ++ में this
का प्रकार Foo *const
है।
f
अंदर, this
टाइप Foo *
क्योंकि f
एक const
सदस्य समारोह नहीं है।
आप ऑब्जेक्ट पर f
पर कॉल नहीं कर सकते हैं। निम्नलिखित गलत है:
const Foo obj;
obj.f();
इसका कारण यह है अंदर Foo::f
ठीक है, this
सूचक Foo *
बजाय const Foo *
है, और इसलिए समारोह कॉल एक सूचक रूपांतरण जो एक क्वालीफायर को छोड़ देता है मांग करती है।
this
पॉइंटर स्वयं एक चर नहीं है। यह असाइन करने योग्य नहीं है, लेकिन const
क्वालीफायर की वजह से नहीं। Foo *const this
जैसे दायरे में कोई घोषणा नहीं है। एक this
अभिव्यक्ति भाषा के नियम के रूप में बस एक आभासी नहीं है।
this
पॉइंटर &obj
से बहुत अलग नहीं है।
पर नोट देखें मानकों के उद्धरण की तुलना में एक अच्छा, अधिक शैक्षणिक स्पष्टीकरण। +1 – StellarVortex
इसका प्रकार सदस्य फ़ंक्शन पर निर्भर करता है।
एक दसवीं कक्षा के लिए उदाहरण के लिए, यदि सदस्य कार्यों
1) स्थिरांक है, तो इस प्रकार के स्थिरांक एक्स *
2) अस्थिर है, तो यह है अस्थिर एक्स * आदि की है
अन्यथा यह एक्स *
है यह शायद 'फू * const' –
@TomKnapen कोई यह नहीं है: http://stackoverflow.com/questions/16102143/c-the-this-pointer-is-always-const/ –
यदि यह 'कॉन्स फू * था, तो इसका मतलब यह होगा कि आप सदस्य को बदल नहीं सकते हैं वस्तु में दंगे (स्पष्ट रूप से बताए गए 'यह->' होने वाली सभी पहुंचों की कल्पना करें।यह तब तक इरादा नहीं है जब तक कि आप सदस्य कार्य को स्वयं 'कॉन्स्ट' घोषित न करें। – Steve314