解引用運算子生成左值,所以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 短路求值 邏輯與和邏輯或總先計算左運算元。且只在左運算元無法確定結果時,才會求解右運...