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처럼 조건부 값을 다루는 타입의 멤버 접근도 있어요.

더 알아보기 (Learn more)

cppreference