다른 컨테이너의 반복기 비교: 정의되지 않은 동작 명확화
C에서 반복기로 작업할 때는 다음 컨테이너의 반복기 비교의 한계를 이해하는 것이 중요합니다. 다른 용기. 이 기사에서는 foo.begin() == bar.begin() 표현식이 false 또는 정의되지 않은 동작을 생성하는지 여부에 대한 질문을 조사합니다. 여기서 foo와 bar는 두 개의 별도 std::벡터 컨테이너입니다.
C 11 표준(n3337)에서는 다른 컨테이너의 반복자를 직접 비교할 수 없습니다. 섹션 24.2.5에서는 정방향 반복자에 대한 항등 연산자 ==의 도메인은 동일한 기본 시퀀스에 대한 반복자에 대해서만 정의된다고 명시합니다. 서로 다른 컨테이너는 별도의 시퀀스로 간주되므로 이들의 반복자를 비교하는 것은 정의되지 않은 동작입니다.
게다가 LWG 문제 #446에서는 이 문제를 구체적으로 다루고 있습니다. 제안의 목표는 달리 명시적으로 정의되지 않는 한 서로 다른 범위의 반복자를 비교하는 것이 정의되지 않음을 명확히 하는 명시적인 텍스트를 표준에 추가하는 것입니다. 이는 std::find와 같은 함수를 사용하는 등 고유한 범위의 반복기를 간접적으로 비교하는 경우에도 정의되지 않은 동작이 발생할 수 있다는 점을 강조합니다.
따라서 서로 다른 컨테이너 또는 서로 다른 컨테이너의 하위 범위의 반복기를 비교하지 않는 것이 중요합니다. 그렇게 하면 예측할 수 없는 결과가 발생할 수 있으므로 강력한 코드 관행에서는 피해야 합니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3