【问题标题】:Defining static const std::string class variable定义静态 const std::string 类变量
【发布时间】:2016-01-15 14:07:21
【问题描述】:

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

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

文件:Consts.h

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

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

文件:Consts.h

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

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

【问题讨论】:

    标签: c++ c++11 constants


    【解决方案1】:

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

    .h 文件:

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

    .cpp 文件:

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

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

    【讨论】:

    • 我使用命名空间常量只是为了说明这里有一些命名空间的例子。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多