哪个更适合字符串文字, 标准字符串或字符数组?
我的意思是说对于常量字符串,比如说
const char name[] = "so"; //or to use
const string name = "so";
答案 0 :(得分:8)
对于字符串文字,并且仅用于来自文字的字符串常量,我会使用const char[]
。 std::string
的主要优点是它具有免费的内存管理,但这不是字符串文字的问题。
无论如何它是文本的实际类型,它可以直接用于任何需要旧C样式空终止字符串或C ++字符串(隐式转换开始)的API中。您还可以使用数组而不是指针来获得编译时大小。
现在,在定义函数接口时,即使有意传入常量,我也希望std::string
而不是const char*
,因为在后一种情况下,大小会丢失,并且可能需要重新计算。
出于我自己的经验。对于带有信息/错误消息的文字字符串的日志调用库(使用变量参数)的每次调用,我都变得越来越老了。{/ p>
答案 1 :(得分:2)
您应该使用更适合您的方式。如果没有特殊要求,我会使用std::string
,因为它可以完成所有内存工作。
对于字符串文字,我使用const char*
。反对const char[]
的原因是您可以使用const char*
初始化另一个常量。请检查以下代码:
const char str1[] = "str1";
const char* str11 = "str11";
const char str2[] = str1; // <<< compile error
const char* str22 = str11; // <<< OK
字符串文字具有静态存储持续时间(根据2.13.4 / 2),因此指针const char*
在程序完成之前有效。
答案 2 :(得分:2)
你在做什么?你的方法有什么期望?
const char的存储量较小,但没有std :: string的强大功能,或使用它时的安全性。但是,如果你有很多C API,那么它可能是更明智的选择。
std :: string将是首选选项。
答案 3 :(得分:1)
对于字符串文字,我倾向于const std::string
而不是const char *
。因为将字符串文字传递给函数const std::string &
,每次调用时都会静默创建字符串,而不是只调用一个字符串。但是,如果我主要使用期望const char *
的函数的文字,我将使用它。
我倾向于支持std::string
apis。
当然,如果我使用的是unicode,我会使用std::wstring
和wchar_t
。