C++ 中的 ?--> 操作符是什么?
C++ 中没有这样的运算符。有时,我们需要创建包装类型。例如,unique_ptr、shared_ptr、optional 等类型。通常,这些类型有一个访问成员函数名为 .get,但它们还提供了运算符 → 来支持直接访问包含的值,类似于普通指针所做的那样。
问题有时是我们有一些这些类型相互嵌套。这意味着我们需要多次调用 .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; };
广告