有一个从std::string
to的隐式转换std::string_view
,它不被认为是不安全的,即使如果程序员不小心,这肯定会导致很多悬空引用。
另一方面,没有从使用相同参数的隐式转换,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
:NOPE - 串联
std::string
+const char*
:好的 - 串联
std::string
+std::string_view
:NOPE
我错过了什么或者这完全是胡说八道吗?
最后,如果没有所有使其类似于的关键部分,这个字符串视图有多大用处const char*
?将它集成到stdlib的生态系统中而不是完成最后一步有什么意义?毕竟,如果我们需要一个代表一段字符串的对象,我们可以自己编写。实际上,很多图书馆早在几年前就已经这样做了。制定标准的全部意义在于使其适用于最广泛的用例,不是吗?
他们会在C++23中解决这个问题吗?