>백엔드 개발 >C++ >Const Map 액세스: `operator[]` 대신 `at()`를 사용하는 이유는 무엇입니까?

Const Map 액세스: `operator[]` 대신 `at()`를 사용하는 이유는 무엇입니까?

DDD
DDD원래의
2024-12-04 09:30:12334검색

Const Map Access: Why Use `at()` Instead of `operator[]`?

Const 맵의 요소에 액세스: 연산자[] 대 at()

상수 맵으로 작업할 때 연산자[를 사용하여 요소에 액세스합니다. ] 실패할 수 있습니다. 그러나 at()을 사용하는 것이 실행 가능한 대안입니다. 왜 그럴까요?

비상수 맵에서 Operator[]는 두 가지 기능을 수행합니다.

  • 키가 존재하는 경우 관련 값에 대한 참조를 반환합니다.
  • 키가 존재하지 않으면 키와 연결된 기본 구성 값을 구성하고 다음에 대한 참조를 반환합니다.

그러나 const 맵에서는 Operator[]가 기본 데이터 구조를 수정할 수 없습니다. 따라서 첫 번째 기능만 수행할 수 있으며 두 번째 기능을 사용하여 새 요소를 삽입하려고 하면 오류가 발생합니다.

반대로 at()은 C 11에서 도입된 메서드로 C 11에서 C 11의 요소에 액세스하기 위해 특별히 도입된 메서드입니다. const 맵. 여러 가지 이점을 제공합니다.

  • 키가 존재하지 않으면 std::out_of_range 예외를 발생시켜 벡터 및 deque와 같은 다른 컨테이너와 일관성을 유지합니다.
  • const 오버로드로 인해 const 맵에서 사용할 수 있습니다.

이러한 이유로 at()는 요소에 액세스하는 데 권장되는 방법입니다. const std::map. 예제 코드:

#include <iostream>
#include <map>

int main()
{
    std::map<int, char> A;
    A[1] = 'b';
    A[3] = 'c';

    const std::map<int, char>& B = A;

    std::cout << B.at(3) << std::endl; // it works
    std::cout << B[3] << std::endl;    // it does not work
}

출력:

c
error: can't access elements with operator[] in a const std::map

위 내용은 Const Map 액세스: `operator[]` 대신 `at()`를 사용하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.