3

标题几乎说明了一切。

void f(const char*)

void f(std::string_view)

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

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

4

2 回答 2

5

安全吗?

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

有什么陷阱?

正如您所说,std::string_view不需要以空值终止。如果您在调用链的某个位置需要一个空终止的 c 字符串,那么您不能使用它,因为您不能保证您会拥有一个。

于 2020-02-13T13:26:19.263 回答
1

安全吗?

一般不会。

如果没有,有什么陷阱?

这个 :

std::string_view 语义规定数组不一定是空终止的,这可能是 f 内部的一个真正问题,因为已考虑到这一点(例如,如果将原始指针传递给期望在 f 内部空终止的函数) .

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

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

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

于 2020-02-13T13:27:15.003 回答