是否扩展了 string_view 未定义的行为?

Is extending a string_view undefined behavior?

假设我们有字符串 s 和 string_view s 的某些部分的 sv 使得

sv.data() + sv.size() < s.data() + s.size()

也就是说,sv结束后的字符仍然是s的一部分。以下是已定义或未定义的行为吗?

string_view sv1 {sv.data(), sv.size()+1};

那么我们可以扩展一个 string_view 吗?

来自 cppreference:

The behavior is undefined if [s, s+count) is not a valid range (even though the constructor may not access any of the elements of this range).

[sv.data(), sv.data() + sv.size() + 1) 是有效范围,因为它是 s 的一部分吗?

是,假设如下:

auto s = "The answer is: 42";
std::string_view sv{s, 5};

然后:

std::string_view sv1{sv.data(), sv.size() + 1}; 

是有效范围。这完全违背了 C++ 核心指南,并且可能不是设计代码的好方法……但是是的……它是有效的。