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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Chapter 5. Expressions

發布時間:2025/3/15 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Chapter 5. Expressions 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

算數操作符

  • eg: + - * ?

邏輯操作符

  • eg: & | ! < =

位操作符


  • | Operator | Function|
    | :--------: | :--------:|
    | ~ | bitwise NOT 位求反 |
    |<<| left shift 左移|
    |>>| right shift 右移|
    |&|bitwise AND 位與|
    |^|bitwise XOR 位異或|
    | | bitwise OR 位或|

  • IO操作符的優先級和結合性:移位操作符具有中等優先級,其優先級比算術操作符低,但比關系操作符、賦值操作符和條件操作符優先級高。
cout << 42 + 10; // ok, + has higher precedence, so the sum is printedcout << (10 < 42); // ok: parentheses force intended grouping; prints 1cout << 10 < 42; // error: attempt to compare cout to 42!

賦值操作符

  • 賦值操作符具有右結合性,賦值操作返回的是左值。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的全部內容,希望文章能夠幫你解決所遇到的問題。

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