operator_member_access — 멤버 접근 연산자
operator_member_access — 멤버 접근 연산자 (Member access operators)
멤버 접근 연산자는 객체/포인터의 멤버에 접근하는 연산자들이에요. .(직접 접근), ->(포인터 경유), [](첨자), *(역참조), &(주소) 등이 있어요.
구조체·클래스 멤버를 읽거나 수정할 때 사용해요. p->x는 (*p).x와 같아요.
출처: cppreference
본문
멤버 접근 연산자는 객체의 멤버에 접근하는 연산자들이에요.
연산자 목록
.— 객체의 멤버 직접 접근 (obj.member)->— 포인터를 통해 멤버 접근 (ptr->member,(*ptr).member와 동등)[]— 첨자 (arr[i])*— 역참조 (*ptr)&— 주소 연산자 (&obj)
dot 연산자
struct Point { int x, y; };
Point p;
p.x = 5; // 직접 접근
화살표 연산자
Point* pp = &p;
pp->x = 5; // (*pp).x 와 동등
첨자 연산자
int a[5];
a[2] = 10; // 3번째 요소
첨자 a[i]는 포인터 산술 *(a + i)와 동등해요.
역참조와 주소
int x = 5;
int* p = &x; // & : 주소
int y = *p; // * : 역참조
스마트 포인터와 화살표
std::unique_ptr, std::shared_ptr는 ->를 오버로드해 가리키는 객체의 멤버에 접근하게 해요.
auto sp = std::make_shared<Point>();
sp->x = 1;
클래스에서 오버로딩
operator[]— 컨테이너·배열 클래스에서 첨자 접근operator->— 포인터 행동을 제공하는 클래스operator*— 역참조 행동
struct Matrix {
int data[4][4];
int& operator[](int i) { return data[i][0]; } // 예시
};
멤버 접근과 const
const 객체에서는 const 멤버(함수·데이터)만 접근할 수 있고, 데이터는 const로 보여요.
노트 (Notes)
.는 오버로드할 수 없어요 (객체의 실제 멤버 접근만).- 포인터 역참조 전에 포인터가 유효한지 확인해야 해요 (UB 방지).
std::optional처럼 조건부 값을 다루는 타입의 멤버 접근도 있어요.