2

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

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

换句话说,sv 结尾之后的字符仍然是 s 的一部分。以下是定义的还是未定义的行为?

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

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

来自 cppreference:

如果 [s, s+count) 不是有效范围,则行为未定义(即使构造函数可能无法访问此范围的任何元素)。

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

4

1 回答 1

1

是的,假设如下:

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

然后:

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

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

于 2019-11-08T23:19:05.363 回答