2008-12-02 27 views

cevap

47

Varsayılan parametre, tüm ifade kümesinin bir alt kümesi olabilir. Derleme zamanında ve varsayılan parametrenin beyan edildiği yerde ciltlenmiş olmalıdır. Bu, bir işlev çağrısı veya bir statik yöntem çağrısı olabileceği anlamına gelir ve sabitler ve/veya genel değişkenler veya statik sınıf değişkenleri, ancak üye öznitelikleri değil, herhangi bir sayıda bağımsız değişken alabilir.

Derleme zamanında ve işlevin bildirildiği yerde bağlanmış olması, bir değişkeni kullanırsa, farklı bir değişkenin orijinali orjinalinde gölgelemesi durumunda bile bu değişkenin kullanılacağı anlamına gelir. işlev çağrısı.

// 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

Sorunların iyi bir şekilde açıklanması için çok teşekkürler. –

+1

Küresel değişkenlere başvurabileceğinizi anlayamadım. Http://publib.boulder.ibm.com/infocenter/comphelp/v8v101/index.jsp?topic=/com.ibm.xlcpp8a.doc/language/ref/cplr237.htm ve http: // msdn adresindeki iyi kaynaklar. microsoft.com/en-us/library/e1dbzf09(VS.80).aspx. –

+5

Ayrıca, bir işlev işaretçisi aracılığıyla bir çağrı olabilir, yani. eğer foo (int arg = (* fp)()); Burada, fo'nun ilan edildiği fp'ye bakılır, ancak foo() her çağrıldığında fp değerlendirilir. – MSalters

11

Olmak zorunda değiller! Varsayılan bir parametre, belirli sınırlamalar içinde herhangi bir ifade olabilir. Fonksiyon her çağrıldığında değerlendirilir.

İlgili konular