在阅读了很多关于静态变量初始化的问题之后,我仍然不确定这如何应用于const
命名空间级别的变量。
我在构建脚本生成的头文件中有以下代码:config.h
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
在这种情况下编译器会优化掉吗?