c++ - 在 C++ 中定义类字符串常量?

标签 c++

我看过这两种风格的代码,我不确定是否比另一种更好(这只是风格问题)?你有什么建议为什么你会选择一个而不是另一个。

 //Example1
 class Test {

    private:
        static const char* const str;

};

const char* const Test::str = "mystr";

//Example2
class Test {

     private:
         static const std::string str;

};

const std::string Test::str ="mystr";

最佳答案

通常你应该更喜欢 std::string 而不是普通的字符指针。然而,在这里,用字符串字面量初始化的 char 指针有一个显着的好处。

静态数据有两种初始化方式。一种叫静态初始化,一种叫动态初始化。对于那些使用常量表达式初始化并且是 POD(如指针)的对象,C++ 要求它们的初始化在一开始就发生,在动态初始化发生之前。初始化这样的 std::string 将动态完成。

如果您有一个类的对象是某个文件中的静态对象,并且需要在其初始化期间访问该字符串,则您可以依赖它在使用 const char 时已经设置* const 版本,而使用 std::string 版本,它不是静态初始化的,你不知道字符串是否已经初始化 - 因为对象的初始化顺序跨翻译单元边界未定义。

关于c++ - 在 C++ 中定义类字符串常量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/459942/

相关文章:

c++ - 如何检测浮点表示错误 ...99999... 或 ...00000... 并在 C++ 中更正它们

c# - 如何获取有关设备驱动器的信息

c++ - 尝试使用公钥验证签名时出现 BERDecodeError

c++ - 使用 OpenCV CascadeClassifier 时函数 _main 中引用的未解析外部符号

c++ - "Error C1083: Cannot open include file"但我有包含文件的路径

c++ - 如何以编程方式禁用网络摄像头的自动对焦?

c++ - 仅在堆栈上构造的类;不带新的。 C++

c++ - 使用 C++ WRL 打开 UsbDevice - ERROR_INVALID_HANDLE

c++ - 在 g++ 4.8.1 编译器中测试 atomic_int

c++ - 如何在 C++ 中的登录/密码窗口上使用回车键?