什么是---->?C ++中的运算符?

C ++中没有这样的运算符。有时,我们需要创建包装器类型。例如,像unique_ptr,shared_ptr,可选和类似的类型。通常,这些类型具有称为.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;
};