2008-12-02 17 views

उत्तर

47

डिफ़ॉल्ट पैरामीटर अभिव्यक्तियों के पूर्ण सेट का सबसेट हो सकता है। यह संकलन समय और डिफ़ॉल्ट पैरामीटर की घोषणा के स्थान पर बाध्य होना चाहिए। इसका अर्थ यह है कि यह एक फ़ंक्शन कॉल या स्थैतिक विधि कॉल हो सकता है, और जहां तक ​​वे स्थिरांक और/या वैश्विक चर या स्थैतिक वर्ग चर हैं, लेकिन सदस्य गुण नहीं हैं, तब तक यह किसी भी संख्या में तर्क ले सकता है।

तथ्य यह है कि यह संकलन समय पर और उस स्थान पर जहां फ़ंक्शन घोषित किया गया है, इसका अर्थ यह भी है कि यदि यह एक चर का उपयोग करता है, तो उस चर का उपयोग किया जाएगा, भले ही एक भिन्न चर मूल स्थान पर मूल हो फ़ंक्शन कॉल

// Code 1: Valid and invalid default parameters 
int global = 0; 
int free_function(int x); 

class Test 
{ 
public: 
    static int static_member_function(); 
    int member_function(); 

    // Valid default parameters 
    void valid1(int x = free_function(5)); 
    void valid2(int x = free_function(global)); 
    void valid3(int x = free_function(static_int)); 
    void valid4(int x = static_member_function()); 

    // Invalid default parameters 
    void invalid1(int x = free_function(member_attribute)); 
    void invalid2(int x = member_function()); 
private: 
    int member_attribute; 
    static int static_int; 
}; 

int Test::static_int = 0; 

// Code 2: Variable scope 
int x = 5; 
void f(int a); 
void g(int a = f(x)); // x is bound to the previously defined x 
void h() 
{ 
    int x = 10; // shadows ::x 
    g(); // g(5) is called: even if local x values 10, global x is 5. 
} 
+0

धन्यवाद मुद्दों में से अच्छा स्पष्टीकरण के लिए एक बहुत। –

+1

मुझे एहसास नहीं हुआ कि आप वैश्विक चर का उल्लेख कर सकते हैं। Http://publib.boulder.ibm.com/infocenter/comphelp/v8v101/index.jsp?topic=/com.ibm.xlcpp8a.doc/language/ref/cplr237.htm और http: // msdn पर अच्छे संसाधन। microsoft.com/en-us/library/e1dbzf09(VS.80).aspx। –

+5

यह फ़ंक्शन पॉइंटर के माध्यम से भी कॉल हो सकता है, यानी। अगर foo (int arg = (* fp)()); यहां, एफपी को उस क्षेत्र में देखा जाता है जहां foo घोषित किया जाता है, लेकिन * fp का मूल्यांकन हर बार foo() कहा जाता है। – MSalters

11

उन्हें होने की ज़रूरत नहीं है! एक निश्चित पैरामीटर कुछ सीमाओं के भीतर कोई अभिव्यक्ति हो सकती है। जब भी समारोह कहा जाता है तो इसका मूल्यांकन किया जाता है।

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