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;
};
广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP