标题几乎说明了一切。
void f(const char*)
至
void f(std::string_view)
安全吗?如果没有,有什么陷阱?
std::string_view
语义规定数组不一定是空终止的,这可能是内部的一个真正问题,f
因为已考虑到这一点(例如,如果将原始指针传递给一个期望在内部以空终止的函数f
)。
标题几乎说明了一切。
void f(const char*)
至
void f(std::string_view)
安全吗?如果没有,有什么陷阱?
std::string_view
语义规定数组不一定是空终止的,这可能是内部的一个真正问题,f
因为已考虑到这一点(例如,如果将原始指针传递给一个期望在内部以空终止的函数f
)。
安全吗?
是的,只要它是正确的,它就是安全的。如果有人给你垃圾,你仍然会有垃圾。
有什么陷阱?
正如您所说,std::string_view
不需要以空值终止。如果您在调用链的某个位置需要一个空终止的 c 字符串,那么您不能使用它,因为您不能保证您会拥有一个。
安全吗?
一般不会。
如果没有,有什么陷阱?
这个 :
std::string_view 语义规定数组不一定是空终止的,这可能是 f 内部的一个真正问题,因为已考虑到这一点(例如,如果将原始指针传递给期望在 f 内部空终止的函数) .
只要函数的实现不依赖空终止,更改是安全的。
但是,如果实现确实依赖于空终止,那么在更改该实现之前,更改将是不安全的。
假设函数的实现不依赖空终止是不安全的。