首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C++ 迭代器解引用調用 size() 報錯:優先級問題,需加括號或用 ->

     編輯:程式設計綜合問答

錯誤代碼

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。
  • 若編譯器報「請求成員于非結構/聯合類型」,多半是解引用優先級寫錯。

一個括號/一個箭頭,解決迭代器解引用調用成員的經典編譯錯誤。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved