另一方面,没有从`std::string_view`到`std::string`的隐式转换,即使使用相同的参数,也完全相反:因为程序员可能不小心。
很棒的是,C++有一个替代原始`const char*`指针的方法,但同时也让人感到困惑和简化到了极致。
- 隐式
const char*
->std::string
: 可以 - 隐式
std::string_view
->std::string
: 不行 - 赋值
std::string
=const char*
: 可以 - 赋值
std::string
=std::string_view
: 可以 - 追加
std::string
+=const char*
: 可以 - 追加
std::string
+=std::string_view
: 可以 - 连接
const char*
+std::string
: 可以 - 连接
std::string_view
+std::string
: 不行 - 连接
std::string
+const char*
: 可以 - 连接
std::string
+std::string_view
: 不行
最后,没有所有使其类似于
const char*
的关键部分,这个字符串视图有多有用呢?将其整合到stdlib生态系统中的意义何在,却没有采取最后一步使其完整?毕竟,如果我们需要表示字符串片段的对象,我们可以自己编写。实际上,很多库早在多年前就已经做到了这一点。制定标准的整个目的是使其对最广泛的用例都有用,不是吗?他们会在C++23中修复这个问题吗?