Le partage des variables statiques dans des fichiers: namespace vs classe
Il ya beaucoup de questions à propos de statique vs mondiale ici, mais je pense que ma question est un peu différente.
Je veux savoir si il existe un moyen de partager une variable placé dans un espace de noms à travers les fichiers de la façon dont les variables statiques dans une classe peut.
Par exemple, j'ai codé ceci:
//Foo.h
class Foo
{
public:
static int code;
static int times_two(int in_);
};
namespace bar
{
static int kode;
}
-
//Foo.cpp
int Foo::code = 0;
int Foo::times_two(int in_)
{
bar::kode++;
code++;
return 2*in_;
}
-
//main.cpp
int main()
{
cout << "Foo::code = " << Foo::code << endl;
for(int i=2; i < 6; i++)
{
cout << "2 x " << i << " = " << Foo::times_two(i) << endl;
cout << "Foo::code = " << Foo::code << endl;
cout << "bar::kode = " << bar::kode << endl;
if(i == 3)
{
bar::kode++;
}
}
}
Tout ce qui a abouti à ce code et kode:
Foo::code = 1,2,3,4
bar::kode = 0,0,1,1
Une fois de plus, il est un moyen de partager une variable placé dans un espace de noms à travers les fichiers de la façon dont les variables statiques dans une classe peuvent? La raison pour laquelle je demande, parce que je pensais que je serais en mesure de protéger moi-même à partir de confliciting des variables globales à l'aide de :: la notation, et viens d'apprendre que je ne pouvais pas. Et comme tout se qui ne respectent pas programmeur, je crois que je me suis fais mal.
static
est probablement le plus surchargé de mots clés en C++. Il signifie quelque chose de différent dans ces deux contextes.... et dans ce cas particulier, tout le contraire de ce que vous voulez.
OriginalL'auteur Morpork | 2012-05-10
Vous devez vous connecter pour publier un commentaire.
Oui:
À l'extérieur d'un
class
oustruct
,static
a une toute autre signification. Il donne un symbole de liaison interne. Donc, si vous déclarez la même variable questatic
, vous réellement obtenir un autre exemplaire pour toutes les unités de traduction, pas globale et unique.Notez que vous aurez besoin pour initialiser la variable une fois:
kode
est déclaréextern
ici, passtatic
. Ce qui est important.Oui, j'ai eu le sentiment qu'il y a pas moyen d'éviter extern lorsque plusieurs fichiers sont impliqués. Sauf pour une variable statique dans une classe de cours. Merci pour la réponse rapide, tous.
Vraiment, je ne comprends pas pourquoi les gens veulent éviter extern....
Jamais vraiment pensé à ce sujet, juste par réflexe. Quelque chose semble peu élégante.
OriginalL'auteur Luchian Grigore