C++에는 이러한 연산자가 없습니다. 때로는 래퍼 유형을 생성해야 합니다. 예를 들어 unique_ptr, shared_ptr, optional 및 이와 유사한 유형이 있습니다. 일반적으로 이러한 유형에는 .get이라는 접근자 멤버 함수가 있지만 일반 포인터가 수행하는 것과 유사하게 포함된 값에 대한 직접 액세스를 지원하기 위해 operator→도 제공합니다.
문제는 때때로 이러한 유형 중 일부가 서로 중첩되어 있다는 것입니다. 즉, .get을 여러 번 호출하거나 값에 도달할 때까지 많은 역참조 연산자를 사용해야 합니다.
이 같은 것 -
wrapper<wrapper<std::string>> wp; wp.get().get().length(); wp.get()->length();
이것은 약간 추악할 수 있습니다. 하나의 .get()을 화살표로 바꿀 수 있다면 두 번째 .get()도 바꿀 수 있다면 좋을 것입니다. 이를 위해 C++98에서는 긴 화살표 연산자를 도입했습니다.
wrapper<wrapper<std::string>> wp; wp--->length();
다른 포장 레이어가 있으면 어떻게 합니까? 더 긴 화살표를 만드세요.
wrapper<wrapper<wrapper<std::string>>> wp; wp----->length();
긴 화살표는 단일 연산자가 아니라 여러 연산자의 조합입니다. 이 경우 일반 -> 연산자와 후위 감소 연산자 --.
따라서 wp----→length()를 작성할 때 컴파일러는 ((wp--)--)→length()를 봅니다.
접미사를 정의하면 -- 역참조 연산자와 동일하게 긴 화살표와 더 긴 화살표 연산자 -
template <typename T> class wrapper { public: T* operator->() { return &t; } T& operator--(int) { return t; } private: T t; };