Ich muss einige konstante Zeichenfolgen definieren, die nur von einer Klasse verwendet werden. Es sieht so aus, als ob ich drei Optionen habe:Wo setze ich konstante Zeichenfolgen in C++: statische Klassenmitglieder oder anonyme Namespaces?
Betten Sie die Strings direkt an Orten ein, an denen sie verwendet werden.
sich als private static Konstante Mitglieder der Klasse definieren:
//A.h class A { private: static const std::string f1; static const std::string f2; static const std::string f3; }; //A.cpp const std::string f1 = "filename1"; const std::string f2 = "filename2"; const std::string f3 = "filename3"; //strings are used in this file
sie in einem anonymen Namespace in der CPP-Datei definieren:
//A.cpp namespace { const std::string f1 = "filename1"; const std::string f2 = "filename2"; const std::string f3 = "filename3"; } //strings are used in this file
diese Optionen gegeben, die man würdest du empfehlen und warum? Vielen Dank.
Danke für die Formatierung. – stone
Beachten Sie, dass dies gefährlich ist, wenn Sie die Funktion, die diese Zeichenfolgen aus anderen Übersetzungseinheiten verwendet, vor dem Start von main aufrufen: Die Funktion kann dann auf die Zeichenfolgenobjekte zugreifen, bevor sie erstellt wurden. Aus diesem Grund würde ich die const std :: string-Objekte loswerden und 'char const f1 [] =" filename ";' dafür verwenden. –
@litb: Es scheint, dass Sie sagen, dass es sicherer ist, in diesem Fall primitive Typ Char als das String-Objekt zu verwenden? Darf ich den Grund dafür wissen? – jasonline