C++ primer閱讀筆記----------表達式

該博客用於記錄自己在閱讀過程中不懂的知識點,很少用到但比較重要的知識點以及模棱兩可的知識點

賦值運算符滿足右結合律

移位運算符滿足左結合律

sizeofp; //指針所佔空間大小

sizeof*p//指針所指對象類型所佔空間大小

sizeof返回一個常量表達式(可以用來聲明數組維度)

隱式轉換

宏觀理解:隱式轉換往更寬或更大的類型轉換,賦值運算右邊的 會往左邊轉換

boolshortchar等比int小的類型會先提升爲int再運算

無符號和帶符號運算,如果兩類型相同則會轉換爲無符號,如 果不相同,則依賴於及其兩運算對象存在包含與被包含關係,如 果其中無符號的所有值都被帶符號的包含,則轉換爲帶符號數, 否則轉換爲無符號的如:usignedint long都是4個字節,所以 轉換爲usignedint

3.14L+ 'a'; //'a'先提升爲int,再轉換爲double

其他類型隱式轉換

大多使用數組的表達式中數組轉換爲指向首元素的指針

常量整數值0nullptr可以轉換爲任意指針

指向任意非常量的指針都能轉換爲void*

指向任意對象的指針都能轉換成constvoid*

轉換成bool

允許將非常量的指針和引用轉換成相應常量類型的指針和引用

類類型的轉換,如:

string s = “aaa”; //字面值轉換爲string類型

while(cin >> a) //cin轉換爲bool



強制類型轉換:

static_cast

通常情況下使用該方式,例如

1.強制轉換爲double類型執行浮點除法

2.較大的算術類型轉換爲較小的算術類型(精度損失)

3.用於一些編譯器無法自動執行的類型轉換

void*p = &d;

double*rp = static_cast<double*>(p);

const_cast:

改變運算對象的底層const,只有它能改變表達式的const屬性

constchar *p1;

char*p2 = const_cast<char *> (p1);

如果p1所指對象爲一個常量,通過p2寫值是不行的

reinterpret_cast

無關類型之間的轉換,重新解釋(IBMC++指南C++之父BjarneStroustrupFAQ網頁MSDNVisualC++也都指出:錯誤的使用reinterpret_cast很容 易導致程序的不安全,只有將轉換後的類型值轉換回到其原始類型,這樣纔是正確使用 reinterpret_cast方式。IBMC++指南C++之父BjarneStroustrupFAQ網頁MSDN VisualC++也都指出:錯誤的使用reinterpret_cast很容易導致程序的不安全,只有將轉換 後的類型值轉換回到其原始類型,這樣纔是正確使用reinterpret_cast方式。)所以該轉換 常和hash配合使用





發佈了37 篇原創文章 · 獲贊 34 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章