2010-08-25 8 views
0

HI,Accessibilité des variables

J'ai peu de doutes sur l'accessibilité des variables.

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

cette link dit lien par défaut est extern pour les symboles non-const et statique (interne) pour les symboles const.

qu'en est-il int i est-il accessible dans un autre fichier sans avoir de mot-clé externe? qu'en est-il de la variable présente à l'intérieur de la classe et des fonctions? Comment aces la fonction présente dans l'espace de nom anonyme & Quel lien ont-ils?

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

Les noms dans l'espace de noms sans nom possèdent une liaison interne. – Chubsdad

+1

http://stackoverflow.com/questions/3538807/linkage-of-various-const-static-variables – Chubsdad

Répondre

0

Reportez-vous here

noms dans l'espace de noms sans nom ont une liaison interne.

+0

Salut, merci, qu'en est-il des variables déclarées avec dans la fonction, elles n'auront aucune liaison ou quoi? – Naruto

+0

@chubsdad: Non, ils ne le font pas. Les noms dans un espace de nommage sans nom ont le même lien que dans n'importe quel autre espace de noms: externe, ou interne pour les données constantes. –

+0

@Mike Seymour: Oui, vous avez raison. Une note de bas de page indique que «Bien que les entités d'un espace de noms sans nom puissent avoir un lien externe, elles sont qualifiées par un nom propre à leur unité de traduction et ne peuvent donc jamais être vues depuis une autre unité de traduction. – Chubsdad

1

int i; a un lien externe, et est dans un espace de noms normal, de sorte qu'il est accessible à partir d'autres fichiers. Ils devront le déclarer extern int i; dans le même espace de noms (dans ce cas, l'espace de noms global) pour y accéder.

Les membres d'un espace de noms sans nom ne sont pas accessibles à partir d'autres fichiers - c'est le but de l'espace de noms. Bien qu'ils puissent avoir un lien externe, leur espace de noms est unique au fichier actuel, donc les mêmes déclarations dans un autre fichier se référeront à des choses différentes, uniques à ce fichier.