我已经看到了这两种风格的代码,我不确定一个是否比另一个更好(它只是风格问题)?你有什么建议可以选择一个而不是另一个.
//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";
Johannes Sch.. 56
通常你应该更喜欢std::string
普通的char指针.但是,这里使用字符串文字初始化的char指针具有显着的好处.
静态数据有两个初始化.一个称为静态初始化,另一个称为动态初始化.对于那些使用常量表达式初始化并且是POD(如指针)的对象,C++要求在动态初始化发生之前,在初始阶段进行初始化.初始化这样的std :: string将动态完成.
如果某个类的对象在某个文件中是静态对象,并且在初始化期间需要访问该字符串,那么在使用该const char* const
版本时,您可以依赖它来设置,同时使用该std::string
版本,如果没有静态初始化,则不知道字符串是否已初始化 - 因为未定义跨转换单元边界的对象初始化顺序.
通常你应该更喜欢std::string
普通的char指针.但是,这里使用字符串文字初始化的char指针具有显着的好处.
静态数据有两个初始化.一个称为静态初始化,另一个称为动态初始化.对于那些使用常量表达式初始化并且是POD(如指针)的对象,C++要求在动态初始化发生之前,在初始阶段进行初始化.初始化这样的std :: string将动态完成.
如果某个类的对象在某个文件中是静态对象,并且在初始化期间需要访问该字符串,那么在使用该const char* const
版本时,您可以依赖它来设置,同时使用该std::string
版本,如果没有静态初始化,则不知道字符串是否已初始化 - 因为未定义跨转换单元边界的对象初始化顺序.