将函数参数 `const char*` 转换为 `std::string_view` 是否安全?

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

标题几乎说明了一切。

void f(const char*)

void f(std::string_view)

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

std::string_view 语义规定数组不一定以 null 终止,这在 f 中可能是一个真正的问题,因为已经考虑到这一点(例如,如果传递原始指针在 f).

中期待空终止的函数

Is it safe?

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

what are the pitfalls?

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

Is it safe?

一般不会。

if not, what are the pitfalls?

这个:

std::string_view semantics dictate that the array isn't necessarily null terminated, which can be a real issue inside f since that has be taken into account (eg. if the raw pointer is passed onto a function expecting null termination inside of f).

只要函数的实现不依赖于空终止,变化是安全的。

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

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