什么是---->?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; };