2012-09-04 2 views
1

compare 메서드는 두 문자열 간의 차이 (또는 일치하는 경우 0)를 나타내는 정수 값을 반환한다는 것을 알고 있습니다. 제 질문은, 불일치가 발견 된 경우 불일치시 비교를 중단합니까, 아니면 불일치가 끝날 때까지 완료됩니까?string.compare는 언제 비교를 중단합니까? (std)

컴파일러에 따라 다르거 나 표준입니까? 나는 현재 gcc를 사용하고있다. 4.1.2

+4

비교 결과가 이미 설정된 후 누구도 비교를 계속할 가능성이 있습니까? – Jon

+3

왜 신경 써주세요? 성능 문제가 해결되지 않으면 라이브러리가 올바른 작업을 수행 할 것이라는 점을 확신하십시오. 하지만 옳은 일은 최초의 불평등 한 캐릭터 (예를 들어 한 번에 여러 바이트를 비교하는 것이 더 효율적인 아키텍처)에서 캐릭터를 보는 것입니다. –

+1

어떤 종류의 보안 조치가 있습니까? 나는 ATM이 4 자리 PIN을 얻으려는 최악의 경우 시나리오를 제공하면서 첫 번째 숫자 불일치 후에 PIN을 확인하는 것을 중단했다는 사실에 근거하여 PIN 번호 공격에 대해 읽은 것을 기억합니다. – Alex1985

답변

3

글쎄, 표준은 상관하지 않지만, 비교의 결과는 - 단지 표준이 신경 쓰지 만 - 첫 번째 일치하지 않는 문자에 전적으로 의존한다. 따라서 플랫폼의 캐시 또는 워드 크기를 쉽게 처리 할 수있는 경우 다른 문자를 비교하는 것이 다른 구현 방법에 비해 무의미합니다.

1

지정되지 않습니다.

표준에 따르면 rhs.compare(lhs)char_traits::compare(&rhs[0], &lhs[0], min(rhs.size(), lhs.size())과 같습니다. char_traits::compare은 불일치 과거의 문자 비교 값을 무시하지만 실제로 문자를 읽는지 여부는 더 이상 자세히 설명하지 않습니다.

관련 문제