2016-03-12 4 views
10

यह कोड क्यों काम करता है? f फ़ंक्शन तर्क के सामने class कीवर्ड देखें? अगर मैं इसे जोड़ूं तो यह क्या बदलता है?फ़ंक्शन तर्क से पहले कक्षा कीवर्ड क्या है?

struct A 
{ 
    int i; 
}; 

void f(class A pA) // why 'class' here? 
{ 
    cout << pA.i << endl; 
} 

int main() 
{ 
    A obj{7}; 
    f(obj); 
    return 0; 
} 

उत्तर

16

एक समारोह या एक चर नाम एक वर्ग प्रकार का नाम के समान के साथ दायरे में मौजूद है, वर्ग एक elaborated type specifier में जिसके परिणामस्वरूप बहुविकल्पी के लिए नाम के लिए prepended जा सकता है।

आपको हमेशा एक विस्तृत प्रकार के विनिर्देशक का उपयोग करने की अनुमति है। इसका मुख्य उपयोग मामला, हालांकि, जब आपके पास एक समान नाम वाला फ़ंक्शन या चर होता है। cppreference.com से

उदाहरण:

class T { 
public: 
    class U; 
private: 
    int U; 
}; 

int main() 
{ 
    int T; 
    T t; // error: the local variable T is found 
    class T t; // OK: finds ::T, the local variable T is ignored 
    T::U* u; // error: lookup of T::U finds the private data member 
    class T::U* u; // OK: the data member is ignored 
} 
+0

तो यहाँ '' class' typename' रूप में ही है? – Narek

+0

@ नरेक: नहीं। इस उदाहरण में (या आपके में) 'टाइपनाम' का उपयोग करने का प्रयास करें और आप देखेंगे कि यह विफल हो जाता है। –

+0

यह उत्तर थोड़ा गलत तरीके से लिखा गया है। आप * हमेशा * एक विस्तृत प्रकार विनिर्देशक का उपयोग करने की अनुमति है। इसका प्रमुख * उपयोग केस *, हालांकि, जब आपके पास एक समान नाम वाला फ़ंक्शन या चर होता है। –

संबंधित मुद्दे