Gemeinsame Nutzung von statischen Variablen in Dateien: namespace vs-Klasse
Gibt es eine Menge Fragen über die statische vs global hier, aber ich glaube meine Frage ist ein bisschen anders.
Möchte ich wissen, ob es eine Möglichkeit zum freigeben einer Variablen gesetzt, die in einem namespace Dateien über die Art und Weise statische Variablen in einer Klasse können.
Ich zum Beispiel codiert das:
//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++;
}
}
}
Alle, ergab dies für code und kode:
Foo::code = 1,2,3,4
bar::kode = 0,0,1,1
Wieder einmal, gibt es eine Möglichkeit zum freigeben einer Variablen gesetzt, die in einem namespace Dateien über die Art und Weise statische Variablen in einer Klasse können? Der Grund warum ich Frage ist, weil ich dachte, ich wäre in der Lage, Abschirmung mich aus confliciting Globale Variablen verwenden :: - notation und gerade heraus, ich konnte nicht. Und wie jeder selbst zu missachten Programmierer, ich glaube ich mache es falsch.
static
ist wahrscheinlich die einzige am meisten überlastet Schlüsselwort in C++. Es bedeutet etwas anderes in diesen beiden Kontexten.- ... und in diesem besonderen Fall gerade das Gegenteil von dem, was Sie wollen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja:
Außerhalb der
class
oderstruct
,static
hat eine ganz andere Bedeutung. Es gibt ein symbol interne Verlinkung. Also, wenn Sie erklären, die dieselbe variablestatic
, erhalten Sie tatsächlich eine andere Kopie für alle übersetzungseinheiten, die nicht weltweit einzigartig.Beachten Sie, dass Sie benötigen zum initialisieren der Variablen einmal:
kode
deklariert istextern
hier nichtstatic
. Das ist wichtig.