当我设计类接口时,我坐下来思考我是否应该经常使用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*是否是更好的选择?此外,在开始一个新项目时,最好是与使用保持一致还是只选择最适合当前代码块的那个?