मैं कक्षाडिफ़ॉल्ट तर्क निर्माता की अनुमति के निजी विधि कॉल करने के
class A
{
public:
class Key
{
Key() {}
Key(Key const &) {}
};
A(Key key, int a = 5) {}
};
है Key
के लिए निर्माता निजी है, इसलिए कोई भी एक वस्तु A
निर्माण करने के लिए सक्षम होना चाहिए। हालांकि, निम्न कोड के साथ:
int main() {
A a(A::Key()); // this compiles !!!
A a2(A::Key(), 5); // this doesn't
// somehow defaulting the argument causes the private constructor
// to be OK - no idea why
return 0;
}
मेरी निर्माता में int a
के लिए डिफ़ॉल्ट तर्क का इस्तेमाल कर रही करके, संकलक खुशी से A::Key()
की मेरी उपयोग तथ्य यह है कि यह निजी है के बावजूद संकलित करता है। यदि मैं स्पष्ट रूप से a
के लिए मान देता हूं, हालांकि, कंपाइलर सही ढंग से पहचानता है कि मैं एक निजी निर्माता और त्रुटियों का उपयोग करने की कोशिश कर रहा हूं। ऐसा क्यों है? क्या पहले उदाहरण के लिए संकलक को त्रुटि देने के लिए मजबूर करना है?
लाइव उदाहरण के लिए here देखें।
कारण होगा मुझे पता था कि मैं इस कहीं से पहले ... उन चीजों मैं एक बार हर 5 साल में चलाने के लिए और क्योंकि द्वारा flummoxed हूँ में से एक देखा था मैंने इसे इतने लंबे समय तक नहीं देखा है ... मदद के लिए धन्यवाद। –
@R_Kapp कोई समस्या नहीं, मदद करने में खुशी हुई। – NathanOliver