最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

C++ Primer 筆記-第2章 變量和基本類型

2022-11-18 01:13 作者:Code有毒  | 我要投稿

2.1 基本內(nèi)置類型

2.1.1 算數(shù)類型

  1. 一個(gè)char的空間應(yīng)確??梢源娣艡C(jī)器基本字符集中任意字符對(duì)應(yīng)的數(shù)字值,其大小和機(jī)器字節(jié)一樣。

  2. wchar_t類型用于確??梢源娣艡C(jī)器最大擴(kuò)展字符集中的任意一個(gè)字符,類型char16_t和char32_t則為Unicode字符集服務(wù)(Unicode是用于表示所有自然語(yǔ)言中字符的標(biāo)準(zhǔn))。

  3. 大多數(shù)計(jì)算機(jī)以2的整數(shù)次冪個(gè)比特bite作為塊來(lái)處理內(nèi)存,可尋址的最小內(nèi)存塊稱為字節(jié)byte,存儲(chǔ)的基本單元稱為字word,它通常由幾個(gè)字節(jié)組成。

  4. 大多數(shù)機(jī)器的字節(jié)由8個(gè)比特構(gòu)成(1byte==8bite)

  5. 32位:1word==4byte==32bite

  6. 64位:1word==8byte==64bite

  7. 為了賦予內(nèi)存中某個(gè)地址明確的含義,必須首先知道存儲(chǔ)在該地址的數(shù)據(jù)的類型。類型決定了數(shù)據(jù)所占的比特?cái)?shù)以及該如何解釋這些比特的內(nèi)容。

  8. 通常float: 1word(32bite)、double: 2word(64bite)、long double: 3或4word(96或128bite)

2.1.2 類型轉(zhuǎn)換

  1. 當(dāng)我們賦值給無(wú)符號(hào)類型一個(gè)超過(guò)它表示范圍的值時(shí),結(jié)果是初始值對(duì)無(wú)符號(hào)類型表示數(shù)值總數(shù)取模后的余數(shù)。(a = b x q + r,其中 |r|<|a|。負(fù)數(shù)取模:r = a - (a / b) x b, 其中a/b在C++中是向0取整)

  2. 當(dāng)我們賦給帶符號(hào)類型一個(gè)超出它表示范圍的值時(shí),結(jié)果是未定義的,程序可能繼續(xù)工作、可能崩潰、也可能生成垃圾數(shù)據(jù)。

  3. 程序應(yīng)該盡量避免依賴與實(shí)現(xiàn)環(huán)境的行為。

  4. 切勿混用帶符號(hào)類型和無(wú)符號(hào)類型。?

2.1.3 字面值常量

  1. 我們可以將整型字面值寫作十進(jìn)制、八進(jìn)制、十六進(jìn)制數(shù)的形式。以0開頭的整數(shù)代表八進(jìn)制,以0x或者0X開頭的代表十六進(jìn)制數(shù)。

  2. 如果一個(gè)字面值連與之關(guān)聯(lián)的最大的數(shù)據(jù)都放不下,將產(chǎn)生錯(cuò)誤。類型short沒(méi)有對(duì)應(yīng)的字面值。

  3. 由單引號(hào)括起來(lái)的一個(gè)字符稱為char型字面值,雙引號(hào)括起來(lái)的零個(gè)或多個(gè)字符則構(gòu)成字符串型字面值。

  4. 如果兩個(gè)字符串字面值位置緊鄰且僅由空格、縮進(jìn)和換行符分隔,則它們實(shí)際上是一個(gè)整體。

  5. 轉(zhuǎn)義序列escape sequence?

2.2 變量

2.2.1 變量定義

  1. 初始化不是賦值,初始化的含義是創(chuàng)建變量時(shí)賦予其一個(gè)初始值,而賦值的含義是把對(duì)象的當(dāng)前值擦除,而以一個(gè)新值替代。?

2.2.2 變量聲明和定義的關(guān)系

  1. 如果想聲明一個(gè)變量而非定義它,就在變量名前添加關(guān)鍵字extern,而且不要顯式地初始化變量。

  2. 如果要在多個(gè)文件中使用同一個(gè)變量,就必須將聲明和定義分離。此時(shí),變量的定義必須出現(xiàn)在且只能出現(xiàn)在一個(gè)文件中,而其他用到該變量的文件必須對(duì)其進(jìn)行聲明,卻絕對(duì)不能重復(fù)定義。

2.2.3 標(biāo)識(shí)符

  1. 用戶自定義的標(biāo)識(shí)符中不能連續(xù)出現(xiàn)兩個(gè)下畫線,也不能以下畫線緊連大寫字母開頭。此外,定義在函數(shù)體外的標(biāo)識(shí)符不能以下畫線開頭。

2.3 復(fù)合類型

2.3.1 引用

  1. 區(qū)分左值引用lvalue reference和右值引用rvalue reference。

  2. 引用本身不是一個(gè)對(duì)象,所以不能定義引用的引用。

  3. 引用只能綁定在對(duì)象上,而不能與字面值或某個(gè)表達(dá)式的計(jì)算結(jié)果綁定在一起。

2.3.2 指針

  1. 因?yàn)橐貌皇菍?duì)象,沒(méi)有實(shí)際地址,所以不能定義指向引用的指針。

  2. NULL為預(yù)處理變量,這個(gè)變量在頭文件cstdlib中定義,它的值就是0。

  3. 在C++11新標(biāo)準(zhǔn)下,最好使用nullptr,同時(shí)盡量避免使用NULL。

  4. void*是一種特殊的指針類型,可用于存放任何對(duì)象的地址。

  5. 利用void*指針能做的事:1.拿它和別的指針比較、2.作為函數(shù)的輸入或輸出、3.賦給另外一個(gè)void*指針。

  6. 無(wú)法訪問(wèn)和操作void*內(nèi)存空間中所存的對(duì)象。

2.3.3 理解復(fù)合類型的聲明

  1. 面對(duì)一條比較復(fù)雜的指針或者引用的聲明語(yǔ)句時(shí),從右向左閱讀有助于弄清楚它的含義。如:

    int *p;

    int *&r = p;??? // r是一個(gè)指向指針p的引用。

2.4 const限定符

  1. 利用一個(gè)對(duì)象去初始化另外一個(gè)對(duì)象,則它們是不是const都無(wú)關(guān)緊要。

  2. 默認(rèn)情況下,const對(duì)象被設(shè)定為僅在文件內(nèi)有效。當(dāng)多個(gè)文件中出現(xiàn)了同名的const變量時(shí),其實(shí)等同于在不同的文件中分別定義了獨(dú)立的變量。

  3. 如果想在多個(gè)文件之間共享const對(duì)象,必須在變量的定義之前添加extern關(guān)鍵字。

2.4.2 指針和const

  1. 指向常量的指針pointer to const:

    const double pi = 3.14;

    const double * cptr = &pi;

  2. 常量指針const pointer:把*放在const之前用以說(shuō)明指針是一個(gè)常量,即不變的是指針本身的值而非指向的那個(gè)值。

    int errNumb = 0;

    int *const curErr = &errNumb;

  3. 指向常量對(duì)象的常量指針:

    const double pi = 3.14;

    const double *const pip = &pi;

2.4.3 頂層const

  1. 一般的來(lái)說(shuō),頂層const可以表示任意的對(duì)象是常量。底層const則與指針和引用等復(fù)合類型的基本類型部分有關(guān)。

  2. 比較特殊的是,指針類型既可以是頂層const(top-level const)也可以是底層const(low-level const)。頂層const表示指針本身是一個(gè)常量,底層const表示指針?biāo)傅膶?duì)象是一個(gè)常量。(int *const頂層,const int*底層)

  3. 當(dāng)執(zhí)行對(duì)象拷貝操作時(shí),是否為頂層const不影響拷貝。

  4. 當(dāng)執(zhí)行對(duì)象拷貝操作時(shí),拷入和拷出的對(duì)象都必須具有相同的底層const資格,或者兩個(gè)對(duì)象的數(shù)據(jù)類型必須能夠轉(zhuǎn)換(非常量可以轉(zhuǎn)換成常量,反之則不行)。

2.4.4 constexpr和常量表達(dá)式

  1. 常量表達(dá)式const expression是指值不會(huì)改變并且在編譯過(guò)程中就能得到計(jì)算結(jié)果的表達(dá)式。

  2. constexpr會(huì)把它所定義的對(duì)象置為頂層const,即常量對(duì)象。

  3. 盡管指針和引用都能定義成constexpr,但是它們的初始值卻受到嚴(yán)格的限制。一個(gè)constexpr指針的初始值必須是nullptr或者0,或者存儲(chǔ)于某個(gè)固定地址的對(duì)象。

  4. 在constexpr聲明中如果定義了一個(gè)指針,限定符constexpr僅對(duì)指針有效,對(duì)指針?biāo)傅膶?duì)象無(wú)關(guān)。

2.5 處理類型

2.5.1 類型別名

  1. 傳統(tǒng)方法typedef:

    typedef double base, *p;???? // base是double的同義詞,p是double*的同義詞

  2. 新規(guī)范使用別名聲明alias declaration:

    using SI = Sales item;

  3. 如果某個(gè)類型別名指代的是復(fù)合類型或者常量:

    typedef char *pstring;

    const pstring cstr = 0;? ????//cstr是指向char的常量指針,等同于char* const cstr = 0;

    const pstring *ps;???????? ????// ps是一個(gè)指針,它的對(duì)象是指向char的常量指針

2.5.2 auto類型說(shuō)明符

  1. auto一般會(huì)忽略掉頂層const,同時(shí)底層const則會(huì)保留下來(lái)。

  2. 設(shè)置一個(gè)類型為auto的引用時(shí),初始值中的頂層常量屬性仍然保留。如果我們給初始值綁定一個(gè)引用,則此時(shí)的常量就不是頂層常量了。(此規(guī)則理解不清晰)

2.5.3 decltype類型指示符

  1. 如果希望從表達(dá)式的類型推斷出要定義的變量類型,但是不想用該表達(dá)式的值初始化變量,使用decltype(選擇并返回操作數(shù)的數(shù)據(jù)類型)。

  2. int i = 0, *p = &i;

    decltype(*p) z = i;??????? //結(jié)果類型是int&,而非int。

  3. 對(duì)于decltype所用的表達(dá)式來(lái)說(shuō),如果變量名加上一對(duì)括號(hào),得到的類型于不加括號(hào)時(shí)會(huì)不一樣:

    ·不加括號(hào),得到的結(jié)果就是該變量的類型:

    decltype(i) e = 0;????????? // e是int

    ·加括號(hào),編譯器會(huì)把它當(dāng)作一個(gè)表達(dá)式,變量是一種可以作為賦值語(yǔ)句左值的特殊表達(dá)式,所以會(huì)得到引用類型:

    decltype((i)) e = i;???????? // d是int&(加括號(hào)時(shí),結(jié)果永遠(yuǎn)是引用)

2.6 自定義數(shù)據(jù)結(jié)構(gòu)

2.6.1 定義Sales_data類型

  1. 不能使用圓括號(hào)進(jìn)行類內(nèi)初始化。

2.6.3 編寫自己的頭文件

  1. 預(yù)處理變量無(wú)視c++中作用域的規(guī)則。


C++ Primer 筆記-第2章 變量和基本類型的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
日土县| 鸡泽县| 上虞市| 凌海市| 阿坝县| 勐海县| 大同市| 元氏县| 冀州市| 五莲县| 呼图壁县| 柏乡县| 宝兴县| 太白县| 赣州市| 镇平县| 广南县| 泊头市| 庄浪县| 商城县| 兰考县| 突泉县| 钦州市| 手游| 大姚县| 岱山县| 平塘县| 广平县| 大竹县| 涿州市| 溆浦县| 合山市| 乌拉特后旗| 册亨县| 东方市| 塔城市| 云梦县| 平泉县| 吉木乃县| 哈尔滨市| 木兰县|