C、C++差异之左值右值
生活随笔
收集整理的這篇文章主要介紹了
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++差异之左值右值的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Word设置自动保存时间间隔的方法(wp
- 下一篇: SVM原理以及Tensorflow 实现