第4章 表示式

2021-10-19 05:31:51 字數 925 閱讀 6128

解引用運算子生成左值,所以decltype(*p)的結果是 int &。

取位址運算子生成右值,所以decltype(&p)的結果是 int **。

cin >> v1 >> v2;

//先讀入v1,再讀入v2

如果表示式指向並修改了同乙個物件,將會引發錯誤並產生未定義的行為。

cout << v1 <<

", "

<<

++v1

cout <<42+

10;//+的優先順序較高,先進行+輸出52

*v1++等價於(v1++)。先將v1加1,返回到初始值,解引用的物件是初始值。*

型別轉換

int ival = 3.541 + 3;    //編譯器可能會警告該運算損失了精度

3.14159l + 『a'; //'a'提公升成int,然後該int值轉換成long double

強制轉換

static_cast :任何具有明確定義的型別轉換,只要不包括底層const,都可以使用static_cast.

const_cast : 只能改變運算物件的底層const。

reinterpret_cast : 通常為運算物件的位模式提供較低層次上的重新解釋。

int

*p;char

*pc =

reinterpret_cast

<

char

*>

(p);

string str

(pc)

;//引發錯誤

此時pc所指的真實物件式乙個int而非字元,如果把pc當成普通的字元指標使用就會引發錯誤。

第4章 表示式

左值和右值 當乙個物件被用作右值的時候,用的是物件的值 內容 當物件被用作左值的時候,用的是物件的身份 在記憶體中的位置 求值順序 四種明確規定了運算物件的求值順序的運算子 1 處理復合表示式時 拿不準時用括號強制表示式組合關係復合程式邏輯的要求 如果改變了某個運算物件的值,在表示式其他的地方不要再...

第5章 表示式 4

5.12 型別轉換 c 並不是把兩個不同型別的值直接加在一起,而是提供了一組轉換規則,以便在執行算術操作之前,將兩個運算元轉換為同一資料型別。這些轉換規則由編譯器自動執行,無需程式設計師介入 有時甚至不需要程式設計師了解。因此,它們被稱為隱式型別轉換 implicit type conversion...

第5章 表示式

不想從第一章開始看起,看目錄覺得對第五章中的bitset和sizeof有點興趣,嗯,研究一下。1 if ival ival作為乙個條件表示式,非0時,if條件成立。表示式結果是右值,可讀取結果,不能對它進行賦值。2 短路求值 邏輯與和邏輯或總先計算左運算元。且只在左運算元無法確定結果時,才會求解右運...