介紹由語言本身定義、並用於內建類型運算對象的運算子,同時簡單介紹幾種標準庫定義的運算子。
第四章 運算式
基礎概念
一元運算子:作用於一個運算對象的運算子
二元運算子:作用於兩個運算對象的運算子
函數調用也是一種特殊的運算子,它對運算對象的數量沒有限制
左值:當對象被當做左值的時候,用的是對象的身份(在記憶體中的位置)。
右值:當一個對象被當做右值的時候,用的是對象的值(內容)。
求值順序
在大多數情況下,不會明確指定求值順序。只有四種運算子明確規定可運算對象的求值順序:
1. 邏輯與運算子(&&):先求左側才求右側,只有當左側為真時才計算右側的值2. 邏輯或運算子(||)3. 條件運算子(?:)4. 逗號運算子(,)
算術運算子
bool b = true;bool b2 = -b; //b2是true。-1不等於0,所以b2的值為真
邏輯和關係運算子
關係運算子作用於算術或指標類型,邏輯運算子作用於任意能轉換成布爾值的類型。
- 它們的傳回值都是布爾類型。
邏輯與 &&、 邏輯或 ||
關係運算子
關係運算子的求值結果是布爾值,連在一起用會產生意想不到的結果:
if(i < j < k) //若k大於1則為真
應改為:
if(i < j && j < k)
賦值運算子
賦值運算滿足右結合律
int i, j;i = j = 0; //正確,都被賦值為0
條件運算子 ?:
cond ? expr1 : expr2
滿足右結合律,運算對象一般按照從右向左的順序組合。
位元運算符
作用於整數類型的運算對象,以及一種名為bitset的標準庫類型的運算對象。
~ :位求反<< :左移>> :右移& :位與^ :位異或| :位或
sizeof運算子
返回所佔位元組數,所得值是一個size_t類型。
有如下兩種形式:sizeof(type)sizeof expr
類型轉換
隱式類型轉換
大多數情況下數群組轉換成指標。
- 當數組被用作decltype關鍵字參數,或者作為取址符(&)、sizeof及typeid等運算子的運算對象時,上述轉換不會發生。
顯示轉換
cast-name<type>(expression)
cast-name有如下幾種:
dynamic_cast //運行時類型識別static_cast //只要不包含底層const,均可進行強制類型轉換,告訴編譯器不在乎精度損失const_cast //只能改變運算對象的底層const,稱為去掉cast性質(cast away the const)。將常量對象轉換為非常量對象。reinterpret_cast //
參考:C++Primer第五版
介紹由語言本身定義、並用於內建類型運算對象的運算子,同時簡單介紹幾種標準庫定義的運算子。
相關文章:
第一章C++:函數傳回值、GNU編譯器命令
第二章C++:變數和基本類型