扩展string_view是未定义的行为吗

Is extending a string_view undefined behavior?

本文关键字:未定义 string view 扩展      更新时间:2023-10-16

假设我们在s的某个部分上有字符串s和字符串视图sv,这样

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

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

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

那么我们可以扩展字符串视图吗?

来自cppreference:

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

[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++核心准则,可能不是设计代码的好方法。。。但是是的。。。它是有效的。

相关文章: