当我在设计类接口时,经常会思考是否应该使用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
。 - Cheers and hth. - Alfvoid foo(const std::string &bar)
。 - Red Alertfoo("hello")
会使用std::string
变量创建一个临时变量,是这样吗? - vmrobstd::string
。这样可以在以后避免很多麻烦。相信我。 - lethal-guitar