2011-07-20 68 views
3

我的課程筆記說「C++需要在塊中和類型之間使用聲明,但不在類型中使用」。在使用C++之前聲明的規則是什麼?

這是什麼意思?

int f() { 
    if (i) 
    return i; 
    int i = 1; //allowed? 
    return 0; 

} 

//not allowed? 
int g() { 
    if (i) 
     return i; 
    return 0; 
} 

int i = 1; 

回答

13

號兩者的實施例「在塊」和既不那些被允許。如果您嘗試編譯示例代碼,您將立即收到錯誤消息。

然而,這將被允許:

class Foo { 
    int f() { 
     return i; 
    } 

    private: 
    int i; 
}; 

這是一種內,這就是很重要的區別。

4

這兩個都是錯誤的。正確的形式是這樣的:

int f() { 
    int i = 1; 
    if (i) 
    return i; 
} 

int f() { }是一個塊。您必須聲明i才能在該塊中使用。

4

兩者都是不允許的。 什麼是雖然允許如下:

struct F { 
    void f() 
    { 
     if(i) return i; 
    } 

    int i; 
}; 

這裏F是一個類型,一個用戶定義的結構類型。這就是「在一個類型中」的含義。你的例子都是「在一個塊內」的情況。

1

C++在塊中使用之前需要聲明。然而,在一個結構/類中,只要這個對象被創建,這個聲明就會隱式地產生。調用默認構造函數,將內存分配給其變量,從而消除未定義的類型問題。

這是我對這行的理解。如果錯了,請糾正我編譯器是如何知道派生數據類型成員的reqd內存空間的。