/ / 일반 배열 등 std::span
의 하위 영역에 대한 간단한 참조로 설계 되지 않았습니까 ? API에 비교 연산자를 포함시키기 위해 비교 연산자를 포함해서는 안됩니까? 배제에 대한 추론은 무엇입니까?std::vector
std::array
참고 : 비교 연산자에 의해, 나도 전체 집합을 의미한다 ( <
, <=
, …) 또는 우주선<=>
답변
다니엘 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) 최적화와 유사한 것으로 생각할 수 있습니다.