가능한 중복 :
C++ - Difference between (*). and ->?(* ptr) .f()와 ptr-> f()의 차이점은 무엇입니까?
이 사이의 차이점은 무엇입니까 :
(*ptr).f();
은이 :
ptr->f();
in c++ 여기서 ptr은 함수가 f
인 C++ 클래스에 대한 포인터입니까?
가능한 중복 :
C++ - Difference between (*). and ->?(* ptr) .f()와 ptr-> f()의 차이점은 무엇입니까?
이 사이의 차이점은 무엇입니까 :
(*ptr).f();
은이 :
ptr->f();
in c++ 여기서 ptr은 함수가 f
인 C++ 클래스에 대한 포인터입니까?
ptr
이 일반 포인터이면 둘 다 동일합니다. ptr->f
은 포인터를 역 참조하고 ((*ptr)
에 해당) 참조 해제 된 객체의 멤버에 액세스하는 단축키입니다 (.f
과 동일).
ptr
이 operator->
과 operator*
을 오버로드하는 클래스 인 경우 서로 다른 연산자 오버로드를 호출하므로 서로 다른 동작을 할 수 있습니다.
전혀 차이가 없습니다. (*ptr).f();
이이를 수행하는 더 거친 방법입니다. ptr
일부 스마트 포인터이고 그것의 operator*
및 operator->
에 과부하가 어떤 부작용을 실행하는 경우
사실, 당신은이 문제가있을 수 있습니다. 그러나 이것은 정말로 정말로 나쁜 일입니다. 그것은 악마와 같습니다. #define true false
+1 당신이 (거의) 결코 최소한의 놀라움의 원칙을 위반하는 방식으로 운영자를 정의해서는 안된다는 언급에 대해. – us2012
문체/타이핑의 차이점을 제외하고는 차이점이 없습니다. 구조체 또는 클래스에 대한 포인터를 사용할 때 정확히 (*ptr).member = 7;
대 ptr->member = 7;
과 같습니다.
없음. –
유일한 차이점은 컴파일러는'ptr-> f()'를'(* ptr) .f()'(일명 간단히 말해서)로 변환한다는 것입니다. – Xeo