当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《在C++中定义类字符串常量?》经验,为你挑选了1个好方法。

我已经看到了这两种风格的代码,我不确定一个是否比另一个更好(它只是风格问题)?你有什么建议可以选择一个而不是另一个.

 //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版本,如果没有静态初始化,则不知道字符串是否已初始化 - 因为未定义跨转换单元边界的对象初始化顺序.



1> Johannes Sch..:

通常你应该更喜欢std::string普通的char指针.但是,这里使用字符串文字初始化的char指针具有显着的好处.

静态数据有两个初始化.一个称为静态初始化,另一个称为动态初始化.对于那些使用常量表达式初始化并且是POD(如指针)的对象,C++要求在动态初始化发生之前,在初始阶段进行初始化.初始化这样的std :: string将动态完成.

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


+1我花时间调试一些非常讨厌的崩溃,结果是由于初始化顺序问题导致的字符串类的静态实例导致的崩溃.避免使用`std :: string`的静态实例!
推荐阅读
mobiledu2402851173
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有