array::at
array::at (범위 검사와 함께 원소 접근하기)
지정한 위치의 원소에 대한 참조를 반환하되, 경계 검사(bounds checking)까지 해주는 멤버 함수예요. std::array 멤버로, 위치가 범위를 벗어나면 예외를 던져요. C++11부터 있어요.
출처: cppreference
본문
at은 pos 위치의 원소 참조를 돌려주는데, operator[]와 달리 반드시 범위를 검사해요.
reference at( size_type pos ); // (1)
const_reference at( size_type pos ) const; // (2)
위치 pos가 컨테이너 범위 안에 없으면 std::out_of_range 타입의 예외가 던져져요.
- 매개변수
pos: 반환할 원소의 위치예요. - 반환 값: 요청한 원소에 대한 참조예요.
- 예외:
pos >= size()이면std::out_of_range를 던져요. - 복잡도: 상수 시간이에요.
C++17부터 at은 constexpr로 지정됐고, C++14부터 상수 객체 버전이 constexpr이에요. 그래서 컴파일 타임 계산에서도 쓰일 수 있어요.
음수 인덱스로 잘못 접근해도 안전한 편인데, 그 값이 size_type(부호 없는 타입)으로 변환되면서 보통 매우 큰 값이 되어 범위를 벗어났다고 판정돼요.
조건부로 안전한 접근이 필요할 땐 at을, 성능이 최우선이고 범위를 직접 보장할 수 있을 땐 operator[]를 쓰는 게 일반적이에요.