const-Variablen in der header-Datei und die statische Initialisierung Fiasko

Nach der Lektüre eine Menge der Fragen bezüglich der Initialisierung von statischen Variablen bin ich noch nicht sicher, wie dies gilt für const Variablen auf namespace-Ebene.

Ich habe diese Art von den folgenden code in eine header Datei config.h erzeugt durch das build-Skript:

static const std::string path1 = "/xyz/abc";
static const std::string path2 = "/etc";

Je nach dem was ich gelesen habe, die static Stichwort ist nicht notwendig, sogar veraltet hier.

Meine Frage: Ist der obige code anfällig für die statische Initialisierung Fiasko?

Wenn ich das folgende in einem header Datei myclass.h:

class MyClass
{
public:
    MyClass(const std::string& str) : m_str(str) {}
    std::string Get() const { return m_str; }

private:
    std::string m_str;
}

const MyClass myclass1("test");

Wird diese pose auch keine Probleme mit statischer Initialisierung?

Wenn ich das richtig verstanden, aufgrund const Variablen auf, die interne Verlinkung sollte es kein problem sein, in beiden Fällen?

Edit: (aufgrund dribeas Antwort)

Vielleicht sollte ich erwähnen, dass ich mich für Anwendungsfälle wie:

In main.cpp:

#include <config.h>
#include <myclass.h>

std::string anotherString(path1 + myclass1.Get());

int main()
{
    ...
}

Andere Frage bezüglich dieser use-case: Wird die compiler-Optimierung entfernt path2 in diesem Fall?

InformationsquelleAutor Hanno S. | 2011-01-26

Schreibe einen Kommentar