【发布时间】:2011-01-26 15:44:28
【问题描述】:
在阅读了很多关于静态变量初始化的问题后,我仍然不确定这如何适用于命名空间级别的 const 变量。
我在构建脚本生成的 header 文件config.h 中有以下代码:
static const std::string path1 = "/xyz/abc";
static const std::string path2 = "/etc";
根据我阅读的内容,static 关键字不是必需的,甚至在此处已弃用。
我的问题:上面的代码是否容易出现静态初始化失败?
如果我在 header 文件中有以下内容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吗?
【问题讨论】:
标签: c++ initialization linkage