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