賦值運算子

來源:互聯網
上載者:User

標籤: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開始時指向的那個元素,並將指標向前移動一個位置。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.