2012-04-16 51 views
1
#include <iostream> 

using namespace std; 

int d = 10; 

int main() 
{ 
    int d = 20; 

    { 
     int d = 30; 
     cout << d << endl << ::d; // what does it mean? 
    } 

    return 0; 
} 

輸出之前是:「::」 變量名C++

我不明白,爲什麼 「::d」 給出了10?有人可以向我解釋嗎?

+1

因爲C++團隊想要使語言如此複雜和令人困惑,他們將確保他們從現在開始的十年內的極限小時費率,因爲他們將是唯一能夠在該軟件上工作的人(snark snark)。 – 2012-04-16 23:47:01

+0

爲什麼'\ file.txt'與'\ subdirectory \ file.txt'不一樣。 – MSalters 2012-04-17 07:39:16

回答

11

::d意味着d從全局命名空間

編輯:有類似名稱的d三個不同的變量。一個是全局命名空間d=10,一個是main函數的內部作用域(20),最後一個是主函數內部塊(30)的內部塊。

在你有權訪問(通過名稱)到相應變量的每個塊中,總能訪問全局名稱空間(由::)。

+0

但是有'D = 20',爲什麼它沒有改變它的價值? – iyazici 2012-04-16 23:46:54

+1

@İbrahimYazıcı該代碼中有三個範圍級別發生。全局範圍,main()中的範圍和最內部的範圍{}。您在該程序中聲明瞭三個單獨的變量。沒有一個你不斷重新分配價值。 – 2012-04-16 23:48:22

+0

@qehgt雖然你是正確的,但如果你詳細瞭解範圍規則和那段代碼中真正發生的事情,那麼可能對遇到這個問題的其他人非常有幫助。 – 2012-04-16 23:49:27