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

时间:2020-02-13 13:22:01

标签: c++ c++17 null-terminated string-view

标题几乎说明了一切。

void f(const char*)

void f(std::string_view)

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

std::string_view的语义表明数组不一定以null终止,这可能是f内部的一个实际问题,因为已将其考虑在内(例如,如果将原始指针传递给a函数期望在f内部为空终止。)

2 个答案:

答案 0 :(得分:5)

安全吗?

是的,就正确而言,这是安全的。如果有人给你垃圾,你仍然会有垃圾。

陷阱是什么?

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

答案 1 :(得分:1)

安全吗?

一般而言。

如果没有,陷阱是什么?

此:

std :: string_view语义表明数组不一定必须为null终止,这可能是f内部的一个实际问题,因为已将其考虑在内(例如,如果将原始指针传递到一个期望内部以null结尾的函数中, f)。

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

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

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