Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 화살표 연산자 `->`는 무엇입니까?

<시간/>

점 및 화살표 연산자는 모두 C++에서 클래스 또는 구조체의 멤버에 액세스하는 데 사용됩니다. 이들은 단지 다른 시나리오에서 사용됩니다. C++에서 클래스, 구조체 또는 공용체로 선언된 형식은 "클래스 형식"으로 간주됩니다. 따라서 다음은 이 세 가지를 모두 나타냅니다.

  • a.b는 b가 객체의 구성원(또는 객체에 대한 참조)인 경우에만 사용됩니다. 따라서 a.b의 경우 항상 클래스의 실제 객체(또는 객체에 대한 참조)가 됩니다.

  • a->b는 본질적으로 (*a).b의 약식 표기법입니다. 즉, a가 객체에 대한 포인터이면 a->bis가 가리키는 객체의 속성 b에 액세스합니다.

점은 오버로드될 수 없지만 ->는 오버로드될 수 있으므로 이 연산자가 사용될 때 호출되어야 하는 자체 함수(operator->())를 정의할 수 있습니다. 따라서 operator->를 오버로드하는 클래스의 개체인 경우(일반적인 유형은 스마트 포인터와 반복자입니다) 의미는 클래스 디자이너가 구현한 모든 것입니다.

참조는 의미상 개체에 대한 별칭이므로 "또는 포인터에 대한 참조"도 추가했어야 했습니다. 그러나 포인터(T*&)에 대한 참조는 거의 사용되지 않기 때문에 이것이 도움이 되기보다는 혼란스러울 것이라고 생각했습니다.

예시 코드

#include<iostream>
class A {
   public: int b;
   A() { b = 5; }
};
int main() {
   A a = A();
   A* x = &a;
   std::cout << "a.b = " << a.b << "\n";
   std::cout << "x->b = " << x->b << "\n";
   return 0;
}

출력

5
5