哪一个使用const char []或const std :: string?

时间:2010-01-20 07:39:35

标签: c++ arrays string stl char

哪个更适合字符串文字, 标准字符串或字符数组?

我的意思是说对于常量字符串,比如说

const char name[] = "so"; //or to use 
const string name = "so";

4 个答案:

答案 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::wstringwchar_t