《C++Primer》讀書筆記---基本語言

1 基本內置類型

算數類型:整數、浮點數、單個字符、布爾值

類型+含義+最小存儲空間如下:

 bool 布爾型

 char 字符型 8位

 wchar_t 寬字符型 16位

 short 短整型 16位

 int 整形 16位

 long 長整形 32位

 float 單精度浮點型 6爲有效數字

 double 雙精度浮點型 10位有效數字

    long double 擴展精度浮點型 10位有效數字

1.1整形

      計算機具有存儲結構最基本的方法是用塊處理存儲,將存儲器中的每一個字節和一個地址關聯起來:

      736424      -->     0 0 0 1 1 0 1 1

      736425      -->     0 1 1 0 1 0 1 1

在圖中左邊是字節的地址,地址後面爲字節的8位,要讓地址736425的字節有意義,必須知道該地址的值的類型

整形默認均帶符號,可以使用usigned修飾使其位無符號類型,signed類型的8位內存,存儲之範圍至少爲-127~127,但整型常見策略是其中一位作爲符號位。符號位爲1,值爲負,符號位位0值爲正數或者0,一個使用一位符號位的8位整形可以取值從-128~127

如usigned char8位無符號整形取值範圍位0~255

當對一個8未的usigned賦值時,如果超過0~255編譯器會將該值對unsigned類型的可能取值數目求模,然後取所得值。例如:試圖將336存儲到8位usigned char中,實際賦值爲336對256求模後的值80;-1賦值給usigned時取值255

1.2 浮點型 

 float 單精度浮點型 6爲有效數字

 double 雙精度浮點型 10位有效數字  (推薦使用)

    long double 擴展精度浮點型 10位有效數字

2 字面值常量

2.1 整型字面值規則

表示方法: (例如:值20的)

十進制   20  

八進制   024

十六進制  0x14

字面值常量類型默認爲int或long,其精度決定於字面值----其值適合int就是int類型,比int大的就是long類型。

通過後綴可以強制轉換爲long或者unsigned或者usigned long類型  例如:

128u   //unsigned 128UL     //usigned long

128L   //long 128LU     //usigned long

*沒有short類型的字面值常量

2.2 浮點字面值規則

表示方法:(默認浮點字面值常量類型爲double類型)

十進制   3.14159F 0.001   //加F表示單精度   12.345L        0.     //加L表示擴展精度

科學計數法   3.14159E0f 1E-3F                                               12.345E1L    0E0

2.3布爾字面值和字符字面值

布爾字面值:true    false

字符字面值:‘a’ L‘a’(款字符)

2.4字符串字面值

"Hello World" 字符串字面值編譯器默認在末尾加 \0 

2.5多行字符串字面值 可以通過使用反斜線在字符串間換行等;

std::cou\

t<<"Hi"<<std::endl;

3 變量

3.1什麼是變量 ----- 提供程序可以操作的有名字的存儲區

變量在使用前必須聲明或定義

默認初始值:

string  -->    空字符串

int     無默認初始值       作爲局部變量

0              作爲全局變量

變量的定義:用於分配變量的存儲空間,還可以制定初始值,一個程序中變量有且僅有一個定義;

變量的聲明:用於向程序表面變量的類型和名字。定義也是聲明,通過extern聲明變量不是定義

extern int i;   //declares but does not define i     定義在別的地方,因只能定義一次

itn i;   //declares ande defines i

3.2const變量

全局作用域裏定義的const變量,訪問範圍爲本文件,除非在定義時使用extern修飾,在別的文件中可以使用extren調用

//file1.cpp

int i = 10;  普通全局變量默認爲隱身的extern修飾

const int i = 10;

extern const int j = 10;如需對const引用需要顯示的extern修飾

//file2.cpp

extren  int i;    //合法

extren const int i;    //不合法

extren const int j;    //合法

3.3引用

引用(reference) 就是對象的另一個名字,多用作函數的形參。

引用必須用與該引用同類型的對象初始化

int ival = 1023;

int &refVal = ival;

當引用初始化後,只要該引用存在,它就保持綁定到初始化時只想的對象,不可能將引用綁定到其他對象。

const 引用只想const對象的引用:

const int ival = 1024;

const int &refVal = ival;

可讀取但不能修改refVal,不能對其賦值。對普通的引用綁定到const對象不合法

非const引用只能綁定到與該引用同類型的對象,但const引用則可以綁定到不同但相關的對象或者綁定到右值

double  davl = 3.14;

const int &ri = davl;

3.4 typedef名字

typedef  用來定義類型的同義詞通常用於以下三種目的:

1 爲了隱藏特定類型的實現,強調使用類型的目的

2 簡化複雜的類型定義時期更容易解讀

3 允許一種類型用於多個目的,同時似的每次使用該類型的目的明確

3.5 枚舉

可以爲一個或多個枚舉成員提供初始值,用來初始化枚舉成員的值必須是一個常量表達式;

enum open_mode{intput, output, append};  默認地,第一個枚舉成員賦值爲0,後面的每個枚舉值比前邊的大1;

enum open_mode{intput = 2, output, append};  //默認地output  3, append 4

每個enum 都定義了一種新的類型,枚舉類型的對象初始化或者賦值只能通過其枚舉成員或者統一枚舉類型的其他對象來進行;

3.6 頭文件

頭文件不應該含有定義,但頭文件可以定義類、值在編譯時就已知到的const對象和inline函數,這些實體可以再多個原文件中定義,只要每個源文件中的定義是相同的。

因爲const是在定義該變量的文件中的局部變量。當頭文件中定義了const後,每個包含該頭文件的源文件都有了自己的const變量,其名稱和值都一樣。

3.7預處理

預處理#inlcude只接受一個參數:頭文件名。預處理器用指定的頭文件的內容代替每一個#include。通過判斷預處理變量(_**.H_)是否已經定義來避免多重包含。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章