다른 컨테이너의 반복자 비교: 정의되지 않은 동작 명확화
C에서 반복자로 작업할 때 C에서 반복자를 비교할 때의 한계를 이해하는 것이 중요합니다. 다른 용기. 이 기사에서는 foo.begin() == bar.begin() 표현식이 false 또는 정의되지 않은 동작을 생성하는지 여부에 대한 질문을 조사합니다. 여기서 foo와 bar는 두 개의 별도 std::벡터 컨테이너입니다.
에 따르면 C 11 표준(n3337)에서는 다른 컨테이너의 반복자를 직접 비교할 수 없습니다. 섹션 24.2.5에서는 정방향 반복자에 대한 항등 연산자 ==의 도메인은 동일한 기본 시퀀스에 대한 반복자에 대해서만 정의된다고 명시합니다. 서로 다른 컨테이너는 별도의 시퀀스로 간주되므로 이들의 반복자를 비교하는 것은 정의되지 않은 동작입니다.
또한 LWG 문제 #446에서는 이 질문을 구체적으로 다루고 있습니다. 제안의 목표는 달리 명시적으로 정의되지 않는 한 서로 다른 범위의 반복자를 비교하는 것이 정의되지 않음을 명확히 하는 명시적인 텍스트를 표준에 추가하는 것입니다. 이는 std::find와 같은 함수를 사용하는 등 고유한 범위의 반복자를 간접적으로 비교하는 경우에도 정의되지 않은 동작이 발생할 수 있다는 점을 강조합니다.
따라서 서로 다른 컨테이너 또는 서로 다른 컨테이너의 하위 범위의 반복자를 비교하지 않는 것이 중요합니다. 그렇게 하면 예측할 수 없는 결과가 발생할 수 있으므로 강력한 코드 관행에서는 피해야 합니다.
위 내용은 다른 컨테이너의 반복자를 비교하는 것이 정의되지 않은 동작입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!