当我设计类接口时,我坐下来思考我是否应该经常使用const char*
或经常使用const std::string&
它,当归根结底时,我经常觉得一只手有 6 个,另一只手有 6 个。
取以下两个函数原型:
void foo(const char* str);
void foo(std::string str);
如果该foo
函数要存储一个字符串,我会说第二个是更好的选择,因为它能够传递字符串并在可能的情况下利用移动语义。但是,如果foo
只需要读取字符串,const char*
解决方案会更好吗?
std::string
从性能的角度来看,不需要创建临时的。但是,使用已经存在的字符串作为参数调用函数看起来很突兀:foo(mystr.c_str())
. 更糟糕的是,如果将来某个时候需要对阵列进行更高级的操作,或者如果应该存储一个副本,则必须更改接口。
所以我的问题是:
是否有明确定义的(无论是个人的还是其他方面的)惯例来规定何时std::string
或const char*
是否是更好的选择?此外,在开始一个新项目时,最好是与使用保持一致还是只选择最适合当前代码块的那个?