इस पर स्कॉट मेयर द्वारा "प्रभावी सी ++" में चर्चा की गई है। कारण यह संदिग्ध है कि वे यह सुनिश्चित करना चाहते थे कि केवल सदस्य की दृश्यता को बदलना पहले से मौजूद कोड के अर्थ को कहीं और नहीं बदलेगा।
अन्यथा, मान लीजिए कि आपकी सी कक्षा कहीं शीर्षलेख में थी। यदि आपके पास एक निजी सी (int) सदस्य था, तो आपके द्वारा मौजूद कोड सी (फ्लोट) को कॉल करेगा। अगर, किसी कारण से, सी (int) सदस्य सार्वजनिक किया गया था, तो पुराना कोड अचानक उस सदस्य को कॉल करेगा, भले ही पुराना कोड न हो, न ही जिस समारोह को इसे बुलाया गया था बदल गया था।
संपादित करें: अधिक कारण हैं:
भी बदतर, मान लीजिए आप निम्नलिखित 2 कार्यों के लिए किया था:
C A::foo()
{
return C(1.0);
}
C B::bar()
{
return C(1.0);
}
इन दोनों कार्यों विभिन्न कार्यों है कि क्या या तो foo या बार एक दोस्त के रूप में घोषित किया गया था पर निर्भर करता है कह सकते हैं सी, या क्या ए या बी से विरासत में है। समान कोड कॉल विभिन्न कार्यों को डरावना है।
(यह शायद नहीं के रूप में अच्छी तरह से स्कॉट मेयर की चर्चा के रूप में डाल दिया है, लेकिन वह विचार है।)
स्रोत
2009-03-13 20:18:38
हम्म, यह एक महान स्पष्टीकरण तरह लग रहा था सर्वप्रथम। लेकिन ... कक्षा _without_ को int-ctor बनाने के लिए अभी भी संभव है, फिर बाद में _add_ कि ctor इतना पुराना कोड अचानक नए सदस्य को कॉल करना शुरू कर देता है ... इसलिए यह सुरक्षा केवल सुरक्षा की झूठी भावना पैदा करती है। –
अच्छा बिंदु। मैं और जोड़ दूंगा। –