有一个从std::stringto的隐式转换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中解决这个问题吗?