मित्र के फ़ंक्शन बॉडी के भीतर नामों के लिए अयोग्य नाम लुकअप कैसे किया जा रहा है? के निम्नलिखित कोड पर विचार करें:मित्र कार्य और स्थिर डेटा सदस्य
#include <iostream>
void foo();
class A
{
friend void foo(){ std::cout << a << std::endl; }
static int a;
};
int A::a = 10;
int main(){ foo(); }
स्टैंडर्ड राज्यों N4296::7.3.1.2/3 [namespace.memdef]
में:
If a friend declaration in a non-local class first declares a class, function, class template or function template the friend is a member of the innermost enclosing namespace.
तो, मैं उम्मीद अयोग्य नाम देखने A::a
भी नहीं मिला है, लेकिन यह किया था। मैं जानबूझकर A::a
घोषणा में दोस्त की फ़ंक्शन परिभाषा के बाद घोषणा नहीं करता हूं, यह नहीं मिलेगा। मित्र के अयोग्य नाम लुकअप के लिए वास्तविक नियम क्या है?
साफ प्रश्न; मैं * मान रहा हूं * इसे इस तथ्य के साथ करना है कि यह एक दोस्त है, इसलिए यह प्रत्यक्ष माता-पिता के दायरे में अभी भी 'ए' के इन-स्कोप सदस्यों तक पहुंचने में सक्षम है। मैंने पहले कभी नहीं माना है; दिलचस्प खोज – Qix
'मित्र' घोषणा और 'स्थिर 'सदस्य चर के बीच कोई संबंध नहीं है। मुझे नहीं पता कि आप क्यों सोचते हैं कि वे संबंधित हैं। –
@RSahu मैंने अभी स्टैटिक डेटा सदस्यों के लिए अयोग्य नाम लुकअप के बारे में पूछा है, हम सीधे दोस्तों के फ़ंक्शन बोड के भीतर गैर-स्टैस्टिक सदस्यों का उपयोग नहीं कर सकते हैं। –