更新代码没有意义,因为字符串文字具有字符数组的类型。
创建一个例如 std::string 的中间对象来执行这样一个简单的任务将是一个坏主意。
像数组一样声明的 c 字符串使用 C 字符串函数。C 字符串函数经过优化,有时仅使用一对机器指令即可执行。
与其他容器一起使用它们的成员函数或标准算法。
例如比较两种方法
const char *s = "abcd";
const char *p = strchr( s, c );
if ( p )
{
//...
}
甚至喜欢
const char *s = "abcd";
if ( const char *p = strchr( s, c ) )
{
//...
}
和
const char *s = "abcd";
size_t n = std::strlen( s );
auto it = std::find( s, s + n, c );
if ( it != s + n )
{
//...
}
或者在 C++ 17 中可读性较差
const char *s = "abcd";
size_t n = std::strlen( s );
if ( auto it = std::find( s, s + n, c ); it != s + n )
{
//...
}
显然,第一种方法更有效。
另一方面,如果您有一个应该接受 c 字符串和/或类型的对象的通用函数,std::string
那么如果该函数不更改它们,则将其std::string_view
用作函数参数。