एक सहकर्मी ने इस तरह के कुछ कोड के बारे में पूछा जो मूल रूप से इसमें टेम्पलेट था।मैं एक कॉन्स्ट विधि से गैर-कॉन्स्ट सदस्य फ़ंक्शन पॉइंटर क्यों कॉल कर सकता हूं?
मैंने टेम्पलेट हटा दिए हैं, लेकिन मूल प्रश्न बना हुआ है: यह ठीक क्यों संकलित करता है?
#include <iostream>
class X
{
public:
void foo() { std::cout << "Here\n"; }
};
typedef void (X::*XFUNC)() ;
class CX
{
public:
explicit CX(X& t, XFUNC xF) : object(t), F(xF) {}
void execute() const { (object.*F)(); }
private:
X& object;
XFUNC F;
};
int main(int argc, char* argv[])
{
X x;
const CX cx(x,&X::foo);
cx.execute();
return 0;
}
यह देखते हुए कि CX एक स्थिरांक वस्तु है, और उसके सदस्य समारोह निष्पादित स्थिरांक है CX अंदर इसलिए :: निष्पादित इस सूचक स्थिरांक है।
लेकिन मैं सदस्य फ़ंक्शन पॉइंटर के माध्यम से एक गैर-कॉन्स्ट सदस्य फ़ंक्शन को कॉल करने में सक्षम हूं।
सदस्य फ़ंक्शन पॉइंटर्स दुनिया के कॉन्स्टेस में एक दस्तावेज छेद पॉइंटर्स हैं?
क्या (दूसरों के लिए संभवतः स्पष्ट) मुद्दे क्या हमने याद किया है?
फिर भी, 'const'-विधियों के साथ किसी को केवल सदस्य-वस्तुओं पर' const 'विधियों को कॉल करने में सक्षम होना चाहिए, है ना? –
सदस्य संदर्भ है, संदर्भित वस्तु नहीं। –