簡體   English   中英

為什么解引用字符串向量迭代器需要括號?

[英]Why does dereferencing a string vector iterator need parentheses?

vector<string> MyStrings;
vector<string>::iterator ItStr;

我正在使用c_str()來返回指向字符串的指針。

為什么需要用括號取消引用?

不編譯: *ItStr.c_str();

錯誤 C2039:“c_str”:不是“std::vector<_Ty>::iterator”的成員

編譯/使用迭代器周圍的括號: (*ItStr).c_str();

如果您能指出我(沒有雙關語)正確的方向,我將不勝感激。謝謝!

. 比一元*具有更高的優先級。

*ItStr.c_str()就像你說過*(ItStr.c_str())

當然,您可以只使用ItStr->c_str() ,因為(*x).y等效於x->y (至少對於指針和迭代器而言;當然,您可以為自己的類型重載運算符這樣它們就不一致了,但是這樣做會很瘋狂)。

因為. 運算符優先於*運算符。 看到這個鏈接

沒有括號, *ItStr.c_str(); 被解釋為:

*(ItStr.c_str());

這顯然是錯誤的,而且您可能並不打算這樣做。 它是這樣解釋的,因為. 運算符的優先級高於*運算符。 為避免這種情況,您需要在此處使用括號:

(*ItStr).c_str();

以便它可以被正確解釋 - 您打算解釋它的方式。

看一下:

如果沒有括號,您將嘗試取消引用整個語句ItStr.c_str()

使用*ItStr周圍的括號,您將取消引用ItStr ,然后獲取它的.c_str()成員。 箭頭運算符->也可以用來代替在取消引用的ItStr周圍放置括號。

正如 James 等人所指出的,這是一個運算符優先級問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM