是否扩展了 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++ 核心指南,并且可能不是设计代码的好方法……但是是的……它是有效的。
假设我们有字符串 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++ 核心指南,并且可能不是设计代码的好方法……但是是的……它是有效的。