vector text;
for (auto i = text.begin(); i != text.end() && !i->empty(); i++)
cout << *i.size() << endl; // 編譯錯誤
. (成員訪問) 優先級 **高於** * (解引用)。
編譯器解析為 *(i.size()) —— 嘗試在迭代器 i 上調用 size(),但迭代器無此方法 → 錯誤。
// 1. 加括號改變優先級
cout << (*i).size() << endl;
// 2. 用箭頭運算符 (迭代器重載了 ->)
cout << i->size() << endl; // 最推薦,簡潔明確
// 3. 先解引用存變量
const string &s = *i;
cout << s.size() << endl;
| 運算符 | 優先級 | 結合性 |
|---|---|---|
. -> | 最高 (後綴) | 左→右 |
* (解引用) & (取址) | 高 (前綴) | 右→左 |
* (乘法) / % | 中 | 左→右 |
-> 訪問成員**,免記優先級、代碼更清晰。auto 推導迭代器類型時,i->member 等價 (*i).member。一個括號/一個箭頭,解決迭代器解引用調用成員的經典編譯錯誤。