2013-02-01 2 views

답변

8

ptr이 일반 포인터이면 둘 다 동일합니다. ptr->f은 포인터를 역 참조하고 ((*ptr)에 해당) 참조 해제 된 객체의 멤버에 액세스하는 단축키입니다 (.f과 동일).

ptroperator->operator*을 오버로드하는 클래스 인 경우 서로 다른 연산자 오버로드를 호출하므로 서로 다른 동작을 할 수 있습니다.

8

전혀 차이가 없습니다. (*ptr).f();이이를 수행하는 더 거친 방법입니다. ptr 일부 스마트 포인터이고 그것의 operator*operator->에 과부하가 어떤 부작용을 실행하는 경우

사실, 당신은이 문제가있을 수 있습니다. 그러나 이것은 정말로 정말로 나쁜 일입니다. 그것은 악마와 같습니다. #define true false

+0

+1 당신이 (거의) 결코 최소한의 놀라움의 원칙을 위반하는 방식으로 운영자를 정의해서는 안된다는 언급에 대해. – us2012

0

문체/타이핑의 차이점을 제외하고는 차이점이 없습니다. 구조체 또는 클래스에 대한 포인터를 사용할 때 정확히 (*ptr).member = 7;ptr->member = 7;과 같습니다.