2010-08-25 67 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;才能访问它。

未命名名称空间的成员不能从其他文件访问 - 这就是命名空间的用途。虽然它们可以有外部链接,但它们的名称空间对于当前文件是唯一的,所以在另一个文件中的相同声明将引用不同的东西,对于该文件来说是唯一的。