gpt4 book ai didi

c++ - 定义 static const std::string 类变量

转载 作者:太空狗 更新时间:2023-10-29 20:37:25 24 4
gpt4 key购买 nike

如何定义可以安全地在我的程序中随处使用的静态常量 std::string 类变量?

第一种方法 - 失败 static initialization order fiasco :

文件:Consts.h

namespace constants {
struct Consts {
static const std::string kVar = "123";
}
}

第二种方法 - 导致将 kVar 复制到我们包含此 header 的每个翻译单元中,这会导致违反单一定义规则原则,并可能导致双重释放或释放后使用错误 - 这是未定义的如果此定义包含在多个 cpp 文件中时的行为(我想这样做是因为我想要全局共享 std::string const)。

文件:Consts.h

namespace constants {
const std::string kVar = "123";
}

有没有更好的方法(除了使用宏 - 这也是一个非常丑陋的全局解决方案)以安全的方式定义这样的变量?这种构造的最佳实践是什么?

最佳答案

常见的方法是在头文件中声明静态常量变量,但在适当初始化的cpp文件中定义它:

.h文件:

namespace constants {
struct Consts {
static const std::string kVar;
}
}

.cpp 文件:

const std::string constants::Consts::kVar = "123";

还有一件事, namespace “constants”已经暗示了常量。无需嵌套名为“Consts”的内部类。松开“Consts”并仅使用具有相同技术的 namespace 。

关于c++ - 定义 static const std::string 类变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34812846/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com