다니엘 Langr가 지적한 바와 같이 , std::span
초기 제안에 비교 연산자를 가지고 P0122 . 그런 다음 N4791 작업 초안 이후이 연산자를 제거 하고 그 이유는 P1085 에 나와 있습니다.
간단히 말해서 copy와 const std::span
는 "shallow"입니다 (즉 std::span
, 복사는 기본 요소를 복사 std::span
하지 않으며 const 는 기본 요소를 수정 하지 못함을 의미 합니다). 존재하는 경우 비교도 "shallow" 일관성을 위해.
이 백서는 다음과 같은 예를 제공합니다.
예 1 :
T oldx = x;
change(x);
assert(oldx != x);
return oldx;
예 2 :
void read_only(const T & x);
void f()
{
T tmp = x;
read_only(x);
assert(tmp == x);
}
이 예제의 어설 션은 if T = std::span
인 경우 실패 할 수 있지만 일반 유형에는 적용되지 않습니다.
하나는이 주장 할 수 std::string_view
얕은 복사 할 수 있지만 깊이 비교를 가지고있다. P1085에도 이에 대한 설명이 있습니다.
string_view
그러나이 string_view
요소는 일치 하지만 해당 요소를 수정할 수 없으므로 얕은 사본은 COW ( string_view
Copy-On-Write) 최적화와 유사한 것으로 생각할 수 있습니다.
operator==
누락되었습니다. Esp. 벡터의 경우 종종 직접 비교하는 것이 편리하다는 것을 알았습니다. 확실하지 않지만 정적 크기 범위 유형에 어려움이있을 수 있습니다.