После прочтения многих вопросов, касающихся инициализации статических переменных, я все еще не уверен, как это относится к переменным const
на уровне пространства имен.
У меня есть следующий код в файле заголовка config.h
, сгенерированном конструкцией script:
static const std::string path1 = "/xyz/abc";
static const std::string path2 = "/etc";
В соответствии с тем, что я прочитал, ключевое слово static
не требуется, даже не рекомендуется использовать его.
Мой вопрос: Является ли код выше склонным к статическому фиаско инициализации?
Если в файле заголовка 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");
Будет ли это представлять проблемы со статической инициализацией?
Если я правильно понял, из-за переменных const
, имеющих внутреннюю связь, в обоих случаях не должно быть проблем?
Изменить: (из-за ответа dribeas)
Возможно, я должен упомянуть, что меня интересуют такие случаи использования, как:
В main.cpp
:
#include <config.h>
#include <myclass.h>
std::string anotherString(path1 + myclass1.Get());
int main()
{
...
}
Еще один вопрос, связанный с этим прецедентом: будет ли в этом случае оптимизировать компилятор path2
?