定义静态常量 std::string 类变量
Defining static const std::string class variable
如何定义静态常量std::string类变量,它可以在我的程序中安全地在任何地方使用?
第一种方法 - 静态初始化顺序失败:
文件: 康斯特斯·
namespace constants {
struct Consts {
static const std::string kVar = "123";
}
}
第二种方法 - 导致将kVar
复制到我们包含此标头的每个翻译单元中,这会导致违反一个定义规则原则,并可能导致双重释放或在释放后使用 错误 - 如果此定义包含在多个 cpp 文件中,这是未定义的行为(我想这样做,因为我想这样做,因为我想要全局共享 std::字符串常量)。
文件: 康斯特斯·
namespace constants {
const std::string kVar = "123";
}
有没有更好的方法(除了使用宏 - 这也是全局如此丑陋的解决方案)以安全的方式定义这样的 var?这种结构的最佳实践是什么?
常见的方法是在头文件中声明静态 const 变量,但在具有正确初始化的 cpp 文件中定义它:
.h 文件:
namespace constants {
struct Consts {
static const std::string kVar;
}
}
.cpp文件:
const std::string constants::Consts::kVar = "123";
还有一件事,命名空间"常量"已经暗示了常量......不需要嵌套名为"Consts"的内部类......松开"Consts"并仅使用具有相同技术的命名空间。
相关文章:
- 查找后更改类变量
- 如何避免在仅标头库中C++类/变量重定义
- c++ 在非类函数中使用类变量
- 基于模板的类变量
- 分段 访问私有类变量时出错
- 为什么从另一个构造函数内部调用C++构造函数不修改类变量?
- 如何访问基类向量中的子类变量?(对于实体组件系统)
- 模板类变量作为非模板类的成员
- C++11 - 获取编译时的所有类变量,并在没有 Boost 的情况下为它们调用方法
- 如何在构造函数中访问类变量以分配它们,而无需在C++中使用此指针
- 类变量无法从类方法访问
- 指针作为类变量 Qt
- 为什么线程对类变量所做的更改没有影响?
- memcpy() 在一个类中被调用以复制到另一个类变量中后会引发异常
- C++:使用基类中的仅派生类变量
- 从静态成员函数访问私有非静态类变量 - C++
- 静态类变量的多重定义
- 使用 WindowSetup 类变量获取错误
- 初始化 std::string& 的私有类变量
- 定义静态常量 std::string 类变量