> 백엔드 개발 > C++ > 다른 컨테이너의 반복자를 비교하는 것이 정의되지 않은 동작입니까?

다른 컨테이너의 반복자를 비교하는 것이 정의되지 않은 동작입니까?

Susan Sarandon
풀어 주다: 2024-11-02 17:53:29
원래의
599명이 탐색했습니다.

Is Comparing Iterators from Different Containers Undefined Behavior?

다른 컨테이너의 반복자 비교: 정의되지 않은 동작 명확화

C에서 반복자로 작업할 때 C에서 반복자를 비교할 때의 한계를 이해하는 것이 중요합니다. 다른 용기. 이 기사에서는 foo.begin() == bar.begin() 표현식이 false 또는 정의되지 않은 동작을 생성하는지 여부에 대한 질문을 조사합니다. 여기서 foo와 bar는 두 개의 별도 std::벡터 컨테이너입니다.

에 따르면 C 11 표준(n3337)에서는 다른 컨테이너의 반복자를 직접 비교할 수 없습니다. 섹션 24.2.5에서는 정방향 반복자에 대한 항등 연산자 ==의 도메인은 동일한 기본 시퀀스에 대한 반복자에 대해서만 정의된다고 명시합니다. 서로 다른 컨테이너는 별도의 시퀀스로 간주되므로 이들의 반복자를 비교하는 것은 정의되지 않은 동작입니다.

또한 LWG 문제 #446에서는 이 질문을 구체적으로 다루고 있습니다. 제안의 목표는 달리 명시적으로 정의되지 않는 한 서로 다른 범위의 반복자를 비교하는 것이 정의되지 않음을 명확히 하는 명시적인 텍스트를 표준에 추가하는 것입니다. 이는 std::find와 같은 함수를 사용하는 등 고유한 범위의 반복자를 간접적으로 비교하는 경우에도 정의되지 않은 동작이 발생할 수 있다는 점을 강조합니다.

따라서 서로 다른 컨테이너 또는 서로 다른 컨테이너의 하위 범위의 반복자를 비교하지 않는 것이 중요합니다. 그렇게 하면 예측할 수 없는 결과가 발생할 수 있으므로 강력한 코드 관행에서는 피해야 합니다.

위 내용은 다른 컨테이너의 반복자를 비교하는 것이 정의되지 않은 동작입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿