将函数参数 `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).
只要函数的实现不依赖于空终止,变化是安全的。
但是,如果实现确实依赖于空终止,那么在更改该实现之前,更改将是不安全的。
假设函数的实现不依赖空终止是不安全的。
标题几乎说明了一切。
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).
只要函数的实现不依赖于空终止,变化是安全的。
但是,如果实现确实依赖于空终止,那么在更改该实现之前,更改将是不安全的。
假设函数的实现不依赖空终止是不安全的。