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