日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C、C++差异之左值右值

發布時間:2023/12/15 c/c++ 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C、C++差异之左值右值 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

C與C++在語法細節上還是有一些差異的,雖然一般情況下可能這些差異不足以造成結果的區別,但有些代碼確實會有影響。


這次,主要總結下左值右值的差異。

在C中,很多左值運算符的結果都不再是左值,然而在C++中,只要邏輯上可行,左值運算符的結果仍然是左值。C++的這種方式,讓運算符表達式之間的靈活性更大。


1、++i, 我們都習慣了在C++中,i 自加后返回自己;然而在C中i自加后,返回的是個臨時的副本,即和i++是一樣的,此結果不能作為左值,即(++i)=0非法。所以我想這就是為什么代碼 中還是很多for循環中使用著i++,因為在C中,我認為i++與++i的效率是一樣的。

2、=,同樣的,C中結果是右值,即 (a = b) = c在C中是不合法的,然而在C++中是可以的。

3、?:,C中返回的分支結果是右值,在C++中規定是,只要兩分支都是左值且類型相同,結果亦為左值(參見,C++程序設計語言-特別版 第6.2節)。即如下:

{???(1???i=11?:?j)=22;?//?C++結果是i?=?22,在C中非法printf("%d?%d?\n",?i,?j);1???i=11?:?j=22;?//?C++結果卻是i?=?11,在C中非法,正確寫法為:?1???i=11?:?(j=22);printf("%d?%d?\n",?i,?j);//?本以為結果和上面相同,因為??:的優先級高于?=,按理說應該等價于上面的表達式//?然而這就是現實,事物永遠不會按著你的想法來。//?C++中的語法規則決定?等價于://?(1)???(i=11)?:?(j=22);//?再同樣參見C++程序設計語言-特別版?第6.2節,這樣奇葩的表達式://?a?=?b?<?c???d?=?e?:?f?=?g;?等價于://?a?=?(?(b?<?c)???(d?=?e)?:?(f?=?g)?);//?這就是所謂的語法了。不過這也挺符合程序員的想法的。 }





轉載于:https://blog.51cto.com/4651077/1613799

總結

以上是生活随笔為你收集整理的C、C++差异之左值右值的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。