C++ Primer 5 CH4 表達式

4.1 基礎

  • 函數調用也是一種特殊的運算符,它對運算對象的數量沒有限制。
  • C++ 的表達式要么是左值,要么是右值。左值可以位于賦值語句的左邊,右值則不可以。
  • 當一個對象被用作右值的時候,用的是對象的值;當對象被用作左值的時候,用的是對象的身份。
    【mark】
  • 優先級規定了運算對象的組合方式,但是沒有說明運算對象的求值順序,一般不會明確指定求值順序。
  • 對于沒有指定執行順序的運算符,如果表達式指向并修改了同一個對象,將會引發錯誤并產生未定義的行為。
cout << i << ++i << endl; // 未定義的

4.2 算術運算符

  • 算術運算符的運算對象和求值結果都是右值。
  • 在表達式求值之前,小整數類型的運算對象被提升成較大的整數類型,所有運算對象最終會轉換成同一類型。
  • 一元正(負)號運算符作用于一個指針或者算數值時,返回運算對象(取負)的提升后的副本。
bool b = true;
bool b2 = -b; // b2 is true
  • m = (m / n) * n + m % n,則 m % n 符號與 m 相同。

4.3 邏輯和關系運算符

  • 邏輯和關系運算符的運算對象以及求值結果都是右值。
  • 相等性測試與布爾字面值
if (val) {} // 如果 val 是任意的非 0 值
if (!val) {} // 如果 val 是 0
if (val == true) // 如果 val 等于 1

4.4 賦值運算符

  • 賦值運算符的左側對象必須是一個可修改的左值。
int i = 0, j = 0, k = 0; // 初始化而非賦值
const int ci = i; // 初始化而非賦值
1024 = k; // 錯誤 字面值是右值
i + j = k; // 錯誤 算術表達式是右值
ci = k; // 錯誤 ci 是常量左值
  • 賦值運算的結果是它的左側對象,并且是一個左值,結果的類型是左側運算對象的類型。
  • 賦值運算符滿足右結合律。

4.5 遞增和遞減運算符

  • 遞增和遞減運算符有兩種形式:前置版本 ++i 和后置版本 i++。這兩種運算符必須作用于左值運算對象,前置版本將對象本身作為左值返回,后置版本將對象原始值的副本作為右值返回。
  • 除非必須,否則不用遞增和遞減運算符的后置版本。

4.6 成員訪問運算符

  • ptr->mem == (*ptr).mem

4.7 條件運算符

4.8 位運算符

  • 位運算符的運算對象如果是“小整型”,則會被自動提升為整數類型。
  • 位運算符如何處理帶符號數的符號位是未定義的,因此建議僅將位運算符用于處理無符號數。
  • 移位運算符(IO運算符)滿足左結合律。

sizeof 運算符

  • sizeof 運算符返回一條表達式或者一個類型名字所占的字節數,返回 size_t 類型的常量表達式。
sizeof (type)
sizeof expr
  • sizeof 運算符滿足右結合律。
  • sizeof 的運算對象中解引用一個無效指針是安全的,因為指針沒有被真正使用。
  • 對數組執行 sizeof 運算得到整個數組的大小,對 sting 或 vector 執行 sizeof 運算只返回該類型固定部分的大小。

4.10 逗號運算符

  • 逗號運算符先對左側的表達式求值,然后將結果丟棄掉,再對右側的表達式求值,返回右側的結果。

4.11 類型轉換

  • 算術轉換:運算符的運算對象將轉換成最寬的類型。
  • 整型提升:轉換后的類型要容納原類型所有可能的值。
  • 如果一個運算對象是無符號類型,另一個是帶符號類型:
    無符號類型不小于帶符號類型:帶符號類型轉成無符號類型;
    帶符號類型大于無符號類型:轉換結果依賴于機器;
  • 指針的轉換
    常量整數值 0 或者字面值 nullptr 能轉換成任意指針類型;
    指向任意非常量的指針能轉成 void
    指向任意對象的指針能轉成 const void
  • 轉換成布爾類型:指針或算術值為 0,結果為 false,否則為 true。
  • 轉換成常量:允許將指向非常量的指針(引用)轉換成相應的常量指針(引用)。
  • 類類型能定義由編譯器自動執行的轉換,不過編譯器每次只能執行一次類類型的轉換。
  • 強制轉換
cast-name <type> (expression)
  • static_cast
// 把一個較大的算術類型賦值給較小的類型。
double slope = static_cast<double>(j) / i;
// 找回存在于 void* 指針的值
double *p = static_cast<double*>(p);
  • const_cast
// 改變運算對象的底層 const
const char *pc;
char *p = const_cast<char*>(pc);
  • reinterpret_cast
// todo

轉載于:https://www.cnblogs.com/eathen/p/6599498.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/253075.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/253075.shtml
英文地址,請注明出處:http://en.pswp.cn/news/253075.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

PHY以太網自動協商原理

自協商原理&#xff1a;自協商是通過一種叫做快速連接脈沖&#xff08;Fast Link Pulse&#xff09;的信號實現的&#xff0c;簡稱FLP。自協商的雙方通過FLP來交換數據。 在具備自協商能力的端口沒有Link的情況下&#xff0c;端口一直發送FLP&#xff0c;在FLP中包含著…

canvas--初級

摘要&#xff1a; canvas:默認寬高為300*150&#xff0c;需用canvas的API定義其寬高繪畫路徑以beginPath()開始,以closePath()結束常用方法fill()、stroke()、rect()、arc()、text()、lineTo()、moveTo()以下為代碼&#xff1a; var cdocument.getElementById("mycanvas&q…

撲克牌翻牌問題(遞歸)

撲克牌翻牌問題 題目描述&#xff1a; 有52張牌&#xff0c;使它們全部正面朝上&#xff0c;從第2張開始&#xff0c;凡是2的倍數位置上的牌翻成正面朝下&#xff1b;接著從第3張牌開始&#xff0c;凡是3的倍數位置上的牌&#xff0c;正面朝上的翻成正面朝下,正面朝下的翻成正面…

以太網自動協商原理

自協商基本原理 自動協商模式是端口根據另一端設備的連接速度和雙工模式&#xff0c;自動把它的速度調節到最高的公共水平&#xff0c;即線路兩端能具有的最快速度和雙工模式。 自協商功能允許一個網絡設備能夠將自己所支持的工作模式信息傳達給網絡上的對端&#xff0c;并接受…

Python學習-文件的調用-讀取

1.文件的打開 open(filename[,mode[,buffering]]) #這個一定要記得關文件。close.() filename,要以路徑的形式展示&#xff0c;比如在"c:\"中&#xff0c;則要這樣寫: rc:\filename 如果不用路徑展示&#xff0c;那就用filename.其會在執行文件所在的文件夾進行搜索…

javascript . 05 json的組成、for...in 遍歷對象、簡單數據類型與復雜數據類型的傳值與傳址、內置對象...

對象字面量 JSON var obj { aaa :999};   var json{"aaa":999&#xff0c;“bbb”&#xff1a;888}; ”kay“&#xff1a;value 對象字面2??定義方法和json很像&#xff0c;只有一點不同&#xff0c;json的key 必須加“”   &#xff1b; 對象&#xff0c;數…

nohup命令

nohup命令 起因 ssh到機器上&#xff0c;然后執行某個程序&#xff0c;再登錄發現程序早就不運行了。 原因 ssh過去之后&#xff0c;執行的大部分命令&#xff08;守護進程不會斷開&#xff09;&#xff0c;都是ssh進程的子進程&#xff0c;ssh斷開&#xff0c;命令自然會中斷 …

mac與phy如何實現網絡自適應

這兩天修改網卡驅動以實現10/100/1000M自適應&#xff0c;因此研究了下phy芯片和emac驅動如何兼容10/100/1000M網絡環境&#xff0c;記錄在此。 網絡中設備端數據鏈路層由mac芯片和phy芯片組成&#xff0c;phy芯片根據外部網絡環境完成自動協商以及配置&#xff0c;驅動中根據p…

asp.net(mvc) 框架

1、NFine mvcef 2、Grove orm架構 3、NHibernate orm 4、NBear 5、petshop 6、Membership 7、Brnshop 網上商城 8、cms快速開發&#xff1a;http://www.open-open.com/news/view/a90f1 9、c#開源框架&#xff1a;http://www.cnblogs.com/gaoyuchuanIT/articles/5612268.html 來…

LVM邏輯卷詳解及創建

我們先來看一下這張圖片&#xff1a;PV: 底層的一個硬盤設備&#xff0c;可以是一個分區&#xff0c;也可能是一個RAID。我們可以把這個塊設備創建成一個物理卷格式&#xff0c;即一個PV。VG: 將一個或多個PV提供的存儲空間在一個更低的單位上劃分成一個個獨立的存儲單元&#…

python文件操作總結

python中對文件、文件夾&#xff08;文件操作函數&#xff09;的操作需要涉及到os模塊和shutil模塊。 得到當前工作目錄&#xff0c;即當前Python腳本工作的目錄路徑: os.getcwd() 返回指定目錄下的所有文件和目錄名:os.listdir() 函數用來刪除一個文件:os.remove() 刪除多個目…

Fread 和fwrite的參數不同,返回值不同

函數fwrite 功能C語言函數&#xff0c;向文件寫入一個數據塊 。size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream);注意&#xff1a;這個函數以二進制形式對文件進行操作&#xff0c;不局限于文本文件返回值&#xff1a;返回實際寫入的數據塊數目&…

課程簡介及算法分析

先學課程 -概率論 運行時間&#xff08;running time&#xff09; - 輸入&#xff08;eg 已經排序&#xff09; - 輸入規模&#xff08;6和6*10^9&#xff09; 各種各樣的分析&#xff1a; - 最壞情況分析&#xff08;worst case&#xff09;usually T(n) max time when inp…

利用shell腳本添加環境變量

在shell腳本設置了環境變量&#xff0c;如export LIBRARY_PATH./lib/&#xff0c;執行了此腳本后, 在執行生成的可執行文件&#xff0c;提示錯誤 error while loading shared libraries: libww.so: cannot open shared object file: No such file or directory 但是如果把expor…

2017 ACM-ICPC西安網賽B-Coin

B-Coin Bob has a not even coin, every time he tosses the coin, the probability that the coins front face up is \frac{q}{p}(\frac{q}{p} \le \frac{1}{2})?p??q??(?p??q??≤?2??1??). The question is, when Bob tosses the coin kktimes, whats the pr…

Java第四次作業

Dog dognew Dog("哈士奇","黑白",2);System.out.println(dog);}}class Dog {private String name;private String color;private int age;public String getName(){return name;}public String getColor(){return color;}public int getAge(){return age;}…

ITU-RBT.656視頻標準接口

601是SDTV的數據結構 656是SDTV的interface 709是HDTV的數據結構 1120是HDTV的interface ITU-R BT.601是演播室數字電視編碼參數標準&#xff0c;而ITU-R BT.656 則是ITU-R BT.601附件A中的數字接口標準&#xff0c; 用于主要數字視頻設備(包括芯片)之間采用27Mhzs并口或243Mb…

C語言博客作業03--函數

1.本章學習總結 1.1思維導圖 1.2本章學習體會及代碼量學習體會 1.2.1學習體會 本周學習了函數&#xff0c;其實&#xff0c;函數于之前學習的三大控制結構是密不可分的&#xff0c;而函數又有其特殊的地方&#xff0c;例如&#xff1a;函數的聲明、函數的調用等等。我們之前編寫…

Shell記錄-Shell命令(其他)

top命令是Linux下常用的性能分析工具&#xff0c;能夠實時顯示系統中各個進程的資源占用狀況&#xff0c;類似于Windows的任務管理器。 &#xff0e;命令格式 top [參數]Shell2&#xff0e;命令功能 顯示當前系統正在執行的進程的相關信息&#xff0c;包括進程ID、內存占用率、…

Insta360:從軟到硬,一年做出360°全景相機,中間填了多少坑?

摘要劉靖康在大學就開始創業。在大二的時候他曾經去騰訊實習&#xff0c;然后又去了“超級課程表”這個團隊實習半年&#xff0c;2013 年 9 月回到南京創業&#xff0c;一開始的產品叫“名校直播”&#xff0c;是一款圍繞院校名師講座所做的視頻直播產品。 不久前&#xff0c;一…