定义静态常量 std::string 类变量

Defining static const std::string class variable

本文关键字:string 类变量 std 静态 常量 定义      更新时间:2023-10-16

如何定义静态常量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"并仅使用具有相同技术的命名空间。