2010-08-25 66 views
0

嗨,變量的可訪問性

我對變量的可訪問性有一些疑問。

int i; //default the linkage is external 
const int i; //default linkage is internal 
extern int i; //explicitly assigning linkage as external 



class a 
    { 
     int l; //Default linkage is external 
     void f() 
     { 
      int k; //default linkage is external 
     } 
    } 

link說 默認聯動是常量符號的extern非const的符號和靜態的(內部)。

怎麼樣int i在沒有外部關鍵字的情況下可以在其他文件中訪問嗎? 在類和函數內部存在的變量呢?

如何使用匿名命名空間中的函數&他們有什麼聯繫?

namespace //members of anonymous namespace 
{ 
class C{}; 
int x; 
} 
+0

未命名名稱空間中的名稱具有內部鏈接。 – Chubsdad 2010-08-25 09:47:59

+1

http://stackoverflow.com/questions/3538807/linkage-of-various-const-static-variables – Chubsdad 2010-08-25 09:49:09

回答

0

參考here

名稱在具名命名空間具有內部鏈接。

+0

嗨,謝謝, 在函數中聲明的變量呢,它們將沒有聯繫或什麼? – Naruto 2010-08-25 10:01:07

+0

@chubsdad:不,他們沒有。未命名名稱空間中的名稱與其他任何名稱空間中的名稱具有相同的鏈接:外部或常量數據的內部名稱。 – 2010-08-25 12:06:57

+0

@Mike Seymour:是的,你是對的。一個腳註說:「儘管未命名名稱空間中的實體可能具有外部鏈接,但它們通過其翻譯單元唯一的名稱進行有效限定,因此永遠無法從任何其他翻譯單元看到。」 – Chubsdad 2010-08-25 13:30:46

1

int i;有外部鏈接,並在一個正常的命名空間,所以它可以從其他文件訪問。他們必須在相同的名稱空間(在本例中爲全局名稱空間)中聲明extern int i;才能訪問它。

未命名名稱空間的成員不能從其他文件訪問 - 這就是命名空間的用途。雖然它們可以有外部鏈接,但它們的名稱空間對於當前文件是唯一的,所以在另一個文件中的相同聲明將引用不同的東西,對於該文件來說是唯一的。