【发布时间】:2014-06-16 11:59:12
【问题描述】:
当我设计类接口时,我经常坐下来思考是否应该使用const char* 或const std::string&另一个半打。
取以下两个函数原型:
void foo(const char* str);
void foo(std::string str);
如果foo 函数要存储一个字符串,我会说第二个是更好的选择,因为它能够传递字符串并在可能的情况下利用移动语义。但是,如果foo只需要读取字符串,const char*的方案会更好吗?
从性能角度来看,不需要创建临时的std::string。但是,使用已经存在的字符串作为参数调用函数看起来很突兀:foo(mystr.c_str())。更糟糕的是,如果以后某个时候需要对阵列进行更高级的操作,或者如果应该存储一个副本,那么就必须更改接口。
所以我的问题是这样的:
是否存在明确定义的(无论是个人的还是其他方面的)约定以规定 std::string 或 const char* 何时是更好的选择?此外,在开始一个新项目时,是最好与使用保持一致还是选择最适合当前代码块的那个?
【问题讨论】:
-
一个简单的规则是:如果你不确定,那么你最好使用
std::string。 -
如果您不想创建临时字符串,请使用
void foo(const std::string &bar) -
@RedAlert 调用
foo("hello")不会导致使用std::string变体创建临时对象吗? -
string 是为字符串设计的, const char * 只适用于常量字符串字面量。对于字符串变量,使用 char * 是禁忌。速度在 99.9% 的情况下都无关紧要,如果您的字符串有 15 个字符,则无论如何都必须将它们存储在某处,没有任何魔法可以让您节省存储空间。按引用传递不会复制数据,如果您一直按值传递参数,那么您做得非常糟糕。
-
我总是更喜欢
std::string。它为您节省了以后的麻烦。相信我。
标签: c++ string character-arrays