哪种字符串字面量更好,标准字符串还是字符数组?
我的意思是对于常量字符串,比如说
我的意思是对于常量字符串,比如说
const char name[] = "so"; //or to use
const string name = "so";
const char []
。 std::string
的主要优点在于它具有免费的内存管理,但字符串字面量不需要考虑这个问题。std::string
而不是const char *
,因为在后一种情况下,大小会丢失,并且可能需要重新计算。.c_str()
。您应该选择更适合自己的选项。如果没有特殊要求,我会使用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*
将在程序完成之前保持有效。
你在做什么?你的方法期望什么?
const char 存储更轻,但没有 std::string 强大,也不够安全。但是,如果你有很多 C APIs,它可能是更明智的选择。
std::string 是首选选项。
const char*
的函数,那么使用std::string
/.c_str()
就没有意义了。一个const
字符数组没有构造函数调用成本,可以直接传递给函数,这使得它比std::string
更便宜地构造和传递给函数。 - CB Bailey我倾向于使用const std::string
而不是const char *
来表示字符串字面值。因为将字符串字面值传递给需要const std::string &
的函数时,每次调用都会悄悄地创建一个新的字符串,而不仅仅是一个。但是,如果我主要与期望const char *
的函数一起使用字面值,那么我会使用它。
我倾向于在API中使用std::string
。
当然,如果我使用Unicode,则使用std::wstring
和wchar_t
。
std :: string
不是STL的一部分)使用COW,我会感到惊讶。在MT环境中,这通常会变成一种悲观化。我认为小字符串优化(小字符串不是在堆上分配,而是在栈上分配)现在是常见的偏好。 - sbistring::string
将会复制它,并且不会使用COW,假设编译器除了const char[]
之外还有一个特殊的内部类型用于字符串字面量,并且STL也是如此。 - Potatoswatter