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

?-->이(가) 무엇입니까? C++의 연산자?


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;
};