標籤:style color 使用 strong c++ c 對象 指標
賦值運算子的左側運算對象必須是一個可修改的左值,如果給定
int i=0,j=0,k=0; //初始化而非賦值
const int ci=i; //初始化而非賦值
則下面的指派陳述式都是非法的:
1024=k ; //錯誤:字面值是右值
i+j=k; //錯誤:算術運算式是右值
ci=k;//錯誤:ci是常量(不可修改的)左值
賦值運算的結果是它的左側運算對象,並且是一個左值。相應的,結果的類型就是左側運算對象的類型。如果賦值運算子的左右兩個運算物件類型不同,則右側運算對象將轉會成左側運算對象的類型:
k=0; //結果:類型是int,值是0
k=3.1415926; //結果:類型是int,值死3
C++11新標準允許使用花括弧括起來的初始值列表作為指派陳述式的右側運算對象:
k={3.14}; //錯誤:窄化轉換
vector<int> vi; //初始為空白
vi={0,1,2,3,4,5,6,7,8,9}; //vi現在含有10個元素了,值從0到9
如果左側運算對象時內建類型,那麼初始化列表最多隻能包含一個值,而且該值即使轉換的話其所佔空間也不應該大於目標類型的空間。
賦值運算滿足右結合性
賦值運算子滿足右結合性,這一點與其他二元運算子不大一樣:
int ival,jval;
ival=jval=0; //正確:都被賦值為0
因為賦值運算子滿足右結合性,所以靠右的賦值運算子jval=0作為靠左的賦值運算子的右側運算對象。又因為賦值運算子返回的是其左側運算對象,所以靠右的賦值運算的結果被賦給了ival。
遞增和遞減運算子
注意:這兩種運算子必須作用於左值運算對象。前置版本將對象本身作為左值返回,後置版本則將對象原始值的副本作為右值返回。
在一條語句中混用解引用 和遞增運算子
後置遞增運算子的優先順序高於解引用運算子,因此*pbeg++等價於*(pbeg++).pbeg++把pbeg的值加1,然後返回pbeg的初始值的副本作為其求值得結果,此時解引用運算子的運算對象時pbeg未增加之前的值。最終,這條語句輸出pbeg開始時指向的那個元素,並將指標向前移動一個位置。