[C++] 成員訪問運算符 && 條件運算符


點運算符和箭頭運算符都可以用於訪問成員,其中,點運算符獲取類對象的一個成員;箭頭運算符與點運算符有關

ptr->mem 等價於 (*ptr).men

string s1 = "a string", *p = &s1;
auto n = s1.size();
n = (*p).size();
n = p->size();

因為解引用運算符的優先級低於點運算符,所以執行解引用運算的子表達式兩端必須加上括號。如果沒有括號,代碼的含義就大不相同了

 

箭頭運算符作用於一個指針類型的運算對象,結果是一個左值。

點運算符分為兩種情況:如果成員所屬的對象是左值,那么結果是左值,如果成員所屬的對象是右值,那么結果是右值。

// 練習4.20 假設iter的類型是vector<string>::iterator,說明下面的表達式是否合法,如果合法,表達式的含義是什么?如果不合法,錯在何處
// a
*iter++;
// 合法,先對iter解引用,然后對iter向前遞增。

// b
(*iter)++;
// 不合法,對iter解引用,然后對解引用的值遞增.
// 因為vector<string>中類型為string,令string類型加1不合法

// c
*iter.empty();
// 不合法,iter是一個迭代器(指針),沒有empty成員函數

// d
iter->empty();
// 合法

// e
++*iter
// 不合法,iter是一個迭代器(指針),*iter解引用得到string類型元素,string無法自增

// f
iter++->empty();
// 合法,對iter求空后對iter自增

 在輸出表達式中使用條件運算符

cout << ((grade < 60) ? "fail" : "pass");
// 輸出pass或者fail

cout << (grade < 60) ? "fail" : "pass";
// 如果grade<60輸出1,如果grade>=60輸出0
// cout << (grade < 60);
// cout ? "fail" : "pass";

cout << grade < 60 ? "fail" : "pass";
// 錯誤,試圖比較cout和60
// cout << grade;
// cout < 60 ? "fail" : "pass";

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM