Chapter 5. Expressions
生活随笔
收集整理的這篇文章主要介紹了
Chapter 5. Expressions
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
算數操作符
- eg: + - * ?
邏輯操作符
- eg: & | ! < =
位操作符
:
| Operator | Function|
| :--------: | :--------:|
| ~ | bitwise NOT 位求反 |
|<<| left shift 左移|
|>>| right shift 右移|
|&|bitwise AND 位與|
|^|bitwise XOR 位異或|
| | bitwise OR 位或|- IO操作符的優先級和結合性:移位操作符具有中等優先級,其優先級比算術操作符低,但比關系操作符、賦值操作符和條件操作符優先級高。
賦值操作符
- 賦值操作符具有右結合性,賦值操作返回的是左值。ival = jval = 0,這一句中先將0賦給jval,返回值是jval,再將jval賦給ival。
自增和自減操作符
- 前置操作返回左值,后置操作返回右值。只有在必要的時候才使用后置操作符,因為前置操作需要做的工作更少。
- *iter++ 后自增的優先級高于解引用,所以這句代碼意義是先后自增,然后解引用,當然后自增返回的副本是未自增前的。作為c++程序員,最好熟悉并使用這種簡潔又準確的方式。
箭頭操作符
- . 和->,知道用就行了。
條件操作符
- cond ? expr1 : expr2;要注意避免深度嵌套,代碼太長的話,用if可讀性更強些。
- 條件操作符的優先級相當低。
sizeof操作符
- 有三種語法形式。
- sizeof (type name);
- sizeof (expr);
- sizeof expr;
- sizeof 操作符的作用是返回一個對象或類型名的長度,返回值的類型為 size_t
逗號操作符
- 逗號表達式是一組由逗號分隔的表達式,這些表達式從左向右計算。逗號表達式的結果是其最右邊表達式的值。如果最右邊的操作數是左值,則逗號表達式的值也是左值。
復合表達式的求值
- 什么是優先級,什么是結合性?優先級是不同操作符之間先算哪個,結合性是相同優先級操作符之間先算左邊還是先算右邊的。
- 大多數操作符沒有規定其操作數的求值順序:由編譯器自由選擇先計算左操作數還是右操作數。
- *++iter iter先自加然后解引用。
new和delete表達式
- 動態創建的對象,初始化情況和靜態的一樣。
類型轉換
- 隱式類型轉換(編譯器自動進行的)
- 操作數兩端的類型被轉換成相同類型。
- 用作條件表達式的類型被轉換成bool類型。
- 不同類型的變量和表達式之間初始化或者賦值的時候。例如int *p = 0int 0 converted to null pointer of type int*
- 算術轉換,比如整數提升,bool提升到int就是1和0。其他還有很多奇葩的轉換細節,一般不會自找麻煩這么寫吧
指針轉換。看個例子
int a[10]; int* p = a;// 這里是有一個array到指針的轉換,我以前以為a就是指針,現在知道卻是存在一個類型轉換的,不然的話,&a的值就應該是 std::cout<<a<;//所以這里也有轉換 std::cout<<&a;//取址和sizeof沒有轉換,或者引用也沒有轉換 std::cout<<p;經過測試,這三個輸出結果都是一樣的。
- 算數值和指針都可以轉換為bool。
- 枚舉類型轉換成int。
標準庫類型定義的轉換,例如while (cin >> s)這里隱式使用了 IO 標準庫定義的類型轉換。
- 顯式轉換
- static_cast:編譯器隱式執行的任何類型轉換都可以由 static_cast 顯式完成
- dynamic_cast
- const_cast:添加或刪除const特性。例如const_cast<char*>(pc_str)就是可以將const類型的pc_str轉換為char*
- reinterpret_cast: 這個用的少吧,書上的解釋是A reinterpret_cast generally performs a low-level reinterpretation of the bit pattern of its operands
- 使用的格式是castname<type>(expression),castname是上面四種轉換方式中的名字,type是要轉換的類型。
- 建議:避免使用強制類型轉換
轉載于:https://www.cnblogs.com/arctanx/p/5227934.html
總結
以上是生活随笔為你收集整理的Chapter 5. Expressions的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 7-1:C++的IO流
- 下一篇: 如何判断一个对象是否是数组。