将函数参数"const char*"转换为"std::string_view"是

Is it safe to convert function parameter `const char*` to `std::string_view`?

本文关键字:quot std string view 参数 函数 const char 转换      更新时间:2023-10-16

标题几乎说明了一切。

void f(const char*)

void f(std::string_view)

安全吗?如果不是,陷阱是什么?

std::string_view语义决定了数组不一定以 null 结尾,这在f内部可能是一个真正的问题,因为已经考虑到了这一点(例如,如果原始指针传递到期望在f内终止 null 的函数(。

安全吗?

是的,只要正确,它是安全的。 如果有人给你垃圾,你仍然会有垃圾。

有哪些陷阱?

正如您所说,std::string_view不需要以 null 终止。 如果你需要在调用链的某个地方需要一个以空结尾的c字符串,那么你不能使用它,因为你不能保证你会有一个。

安全吗?

一般不行。

如果没有,陷阱是什么?

这:

std::string_view 语义规定数组不一定以 null 结尾,这在 f 内部可能是一个真正的问题,因为已经考虑到了这一点(例如,如果原始指针被传递到期望在 F 内部终止 null 的函数(。

只要函数的实现不依赖于 null 终止,更改就是安全的。

但是,如果实现确实依赖于 null 终止,则在该实现更改之前,更改将不安全。

假设函数的实现不依赖于空终止是不安全的。