C++ 表達(dá)式
C++定義了一元運算符和二元運算符,作用于一個對象的運算符是一元運算符,例如&取址符,*解印符等,所以像加減等就是二元運算符。后面會說到三元運算符。(同一個符號既可以時一元運算符也可能是二元運算符,都是根據(jù)環(huán)境來判斷例如*)
運算對象轉(zhuǎn)換
在運算時即使對象的類型不同也沒關(guān)系,只要他們能被轉(zhuǎn)換為同一種類型就行。
例如整型可以轉(zhuǎn)換為浮點型,浮點型可以轉(zhuǎn)換為整型,但是指針不能轉(zhuǎn)換為整型。
注意:小整數(shù)類型(bool、char、short等)通常會被提升為較大的類型主要是int型。后面將做詳細(xì)介紹。
重載運算符
C++語言定義了運算符作用于內(nèi)置類型和復(fù)合類型的運算對象時所執(zhí)行的操作。當(dāng)運算符作用于類類型的運算符對象時,用戶可以自行定義其含義,因為這種自定義的過程事實上就是為已存在的運算符賦予了另一種含義,所以稱之為重載運算符。(overloaded operator)
IO庫的>>和<<運算符以及string對象、vector對象和迭代器使用的運算符都是重載運算符。
我們使用重載運算符時,其包括運算對象的類型和返回值的類型都是由運算符定義的,但是運算對象的個數(shù)、運算符的優(yōu)先級和結(jié)合律都是無法改變的。
左值和右值
一個左值表達(dá)式的求職結(jié)果是一個對象或者一個函數(shù),然而以常量對象為代表的某些左值實際上不能作為賦值語句的左側(cè)運算對象。雖然某些表達(dá)式的求值結(jié)果是對象,但是他們是右值而非左值,可以做一個簡單的歸納,當(dāng)一個對象被用作左值的時候,用的是對象的值(內(nèi)存),當(dāng)對象被用作左值的時候,用的是對象的身份(在內(nèi)存中的位置)。
求值順序
優(yōu)先級規(guī)定了運算對象的組合方式,但是沒有說明對象按照什么順序求值,在大多數(shù)情況下,不會明確指定求值的順序。

我們知道f1和f2會在執(zhí)行乘法之前調(diào)用,因為乘法執(zhí)行的是這兩個函數(shù)的運算結(jié)果,但是我們無法知道f1和f2誰先調(diào)用。
對于沒有指定執(zhí)行順序的運算符來說,如果表達(dá)式指向并修改了同一個對象,將會引發(fā)錯誤并產(chǎn)生未定義的行為,例如<<運算符是沒有明確規(guī)定何時以及如何運算對象求值的。

因為程序未定義所以他會出現(xiàn)我們無法預(yù)測的結(jié)果。編譯器可能先運行++i也可能先求i的值。
有四種運算符明確規(guī)定了運算對象的求值順序。
&&邏輯與:先求左值運算對象的值,只有左側(cè)運算對象為真才繼續(xù)。
||邏輯或。?:條件。,逗號。
算術(shù)運算符

優(yōu)先級從上到下,優(yōu)先級高的運算符比優(yōu)先級低的組合更加緊密。上面所有運算符都滿足左結(jié)合律,意味著當(dāng)優(yōu)先級相同時,按照從左向右的順序進(jìn)行組合。
注意:bool類型在運算中會被當(dāng)做int型。
除法運算和取余運算
除了-m導(dǎo)致溢出的特殊情況,其他時候(-m)/n和m/(-n)都等于-(m/n),m%(-n)等于m%n,(-m)%n等于-(m%n)

這一篇的內(nèi)容基本都是需要理解的而且本人也省掉了很多,所以看起來可能云里霧里,如果有興趣還是可以自己去了解。。