Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

Operator ?-->? ใน C++ คืออะไร


คำตอบสั้น

ไม่มีออเปอเรเตอร์นี้ใน C++ เป็นการผสมผสานของหลายออเปอเรเตอร์

บริบท: Wrapper Types

บางครั้งมี nested wrapper types (unique_ptr, shared_ptr, optional) ต้องเรียก .get() หลายครั้ง หรือ dereference หลายครั้ง

wrapper<wrapper<std::string>> wp;
wp.get().get().length();
wp.get()->length();

Long Arrow Operator

C++98 introduce "long arrow" เพื่อลด .get()

wrapper<wrapper<std::string>> wp;
wp--->length();  // long arrow

เพิ่ม layer → เพิ่ม dash: wp----->length()

กลไกจริง

Long arrow ไม่ใช่ single operator แต่ combination:

  • wp--->length() → compiler เห็น ((wp--)--)->length()
  • Postfix -- + ->

Implementation

template <typename T>
class wrapper {
public:
    T* operator->() { return &t; }
    T& operator--(int) { return t; }  // postfix -- คืน object
private:
    T t;
};

Postfix -- คืน reference ให้ -> ใช้งานต่อได้