标题几乎说明了一切。
void f(const char*)
至
void f(std::string_view)
安全吗?如果没有,陷阱是什么?
std::string_view
的语义表明数组不一定以null终止,这可能是f
内部的一个实际问题,因为已将其考虑在内(例如,如果将原始指针传递给a函数期望在f
内部为空终止。)
答案 0 :(得分:5)
安全吗?
是的,就正确而言,这是安全的。如果有人给你垃圾,你仍然会有垃圾。
陷阱是什么?
正如您所说,std::string_view
不必为null终止。如果您将在调用链的更远的某个地方需要一个以null结尾的c字符串,则不能使用它,因为您不能保证会有一个。
答案 1 :(得分:1)
安全吗?
一般而言。
如果没有,陷阱是什么?
此:
std :: string_view语义表明数组不一定必须为null终止,这可能是f内部的一个实际问题,因为已将其考虑在内(例如,如果将原始指针传递到一个期望内部以null结尾的函数中, f)。
只要函数的实现不依赖于空终止,更改就是安全的。
但是,如果实现确实依赖空终止,那么在更改实现之前,更改将是不安全的。
假设该函数的实现不依赖空终止,将是不安全的。