在這種情況下,很明顯,cmylist [ 2 ] = 3元2到3的值設定!
為什麼操作符返回乙個引用
讓我們仔細看看如何cmylist [ 2 ] = 3評價。因為下標操作符比賦值操作符的優先順序更高,cmylist [ 2 ]首先評估。cmylist [ 2 ]呼叫操作符,我們把它定義為返回乙個參考cmylist m_anlist [ 2 ]。因為操作符是返回乙個引用,則返回實際cmylist m_anlist [ 2 ]陣列元素。我們的部分評估的表達變得cmylist。m_anlist [ 2 ] = 3,這是乙個簡單的整數分配。
在變數一看這一課,你知道在賦值語句的左邊的任何值必須是乙個左值(這是乙個變數,乙個實際的記憶體位址)。通過返回乙個引用,編譯器是滿意的,我們正在返回左值。考慮會發生什麼,如果操作符返回乙個整數的值,而不是通過參考。cmylist [ 2 ]將呼叫操作符,它將返回值的cmylist m_anlist [ 2 ]。
例如,如果m_anlist [ 2 ]有價值的6,運營商[ ]將返回值6。例如,如果m_anlist [ 2 ]有價值的6,運營商[ ]將返回值6。cmylist [ 2 ] = 3將部分評估6 = 3,這是沒有意義的!如果你嘗試這樣做,c++編譯器會抱怨:c:\ vcprojects cpp測試。(386):錯誤c2106:「=」:左運算元必須是左值
c:\ vcprojects cpp測試。(386):錯誤c2106:「=」:左運算元必須是左值
規則:返回的值的引用或指標可以左值或右值。返回的值的值只能是右值。
結論下標操作符通常是過載提供一維陣列元素包含在乙個類。因為字串是典型的字元陣列實現,運營商[ ]往往是在字串類以允許使用者訪問乙個字元的字串。
過載的下標操作符的另乙個好處是,我們可以讓它比直接安全訪問陣列。通常情況下,當訪問陣列,下標操作符不檢查是否該索引是有效的。例如,編譯器不會抱怨下面的**:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include // for assert()
class
intlist
;
int
& intlist::operator (
const
int
nindex)
為什麼不要過載 , 操作符
是一種邏輯運算子,它內建實現了短路原則,比如 condition1 condition2,如果 condition1 不滿足,那麼 condition2 的值將不會得到計算,同理如果 condition1 condition2,當 condition1 為真時,condition2 的值也不會得到計...
c語言操作符 位操作符 移位操作符
1 按位操作符 1.1 按位 與 雙目運算子 僅當兩個運算元都為1時,結果為1,否則為0。參與運算的數以補碼方式出現。例 9 5 1 0000 1001 9的補碼 0000 0101 5的補碼 0000 0001 1的補碼 應用 a 通常將某些位清零或保留某些位。例如 將a的高八位清零,保留低八位,...
linq操作符 限定操作符
限定操作符運算返回乙個boolean值,該值指示序列中是否有一些元素滿足條件或者是否所有元素都滿足條件。一 all操作符 all方法用來確定是否序列中的所有元素都滿足條件。看下面的例子 1 using system 2using system.collections.generic 3using s...