1. 程式人生 > >第二章 變量和基本類型

第二章 變量和基本類型

兩個 包括 編譯過程 重要 引用 註意 計算 相關 數據結構

1.基本類型包含算術類型,算術類型又包含整型和浮點型。int最少是兩個字節(16位/bit),不同的機子不一樣,所以適合搬移是很重要,不要涉及到固定字節的程序。

2.賦值的時候有類型轉換的話,強制轉換成左邊類型。有符號和無符號進行運算,都是先轉換成無符號數,有需要再轉換成最終結果。

3.變量定義:類型說明符+變量名。初始化,創建一個變量並給這個變量初始值。(何為拷貝,就是最起碼這個拷貝是一個對象,並且和你是一樣的類型,或者可以進行強制轉換的)

4.列表初始化,以及默認初始化,在任何函數體之外,內置類型默認初始值,在函數體內,內置類型不初始化,未定義。

5.支持分離式編譯,這樣的話便須支持聲明和定義。一個文件若想用別處定義的變量或者函數,必須進行聲明。extern int i並且沒有顯式初始化。

6.復合類型,包括引用和指針。引用是左值引用(什麽意思,左值的意思不應該是地址麽?),int ival=10;int &rval=ival;這就是引用,且必須初始化。引用本身並不是一個對象,所以不能int &&rrval=rval;//錯誤。int &rrval=rval;這個沒問題。

7.指針,也是對象的間接訪問。可以先後指向,假如是棧內存或者靜態內存其實沒啥意思,因為可以通過變量名直接訪問,不需要間接。還有一種用途應該是傳遞變量。不過我可以用引用。int *p=&ival;p=&b;

8.const限定符,如果想其他地方也用const常量的話,需都加extern,定義的地方也要;

9.不能把非常量引用綁定到常量上,這意味著可以修改常量。const int &r=42;這種引用也是可以的,一般用作形參,這樣就可以用字面值初始化形參。

const int *const p=π前面這個const表明不能通過*p去修改該pi,後面這個const表示p也不能指向其他int型變量。前面這個是底層const,後面這個是頂層const,本身不能變的是頂層,指向對象不能變的是底層。拷貝的時候要註意底層const,這個屬性不能被復制。

10.常量表達式是指值不會變並且在編譯過程就能得到計算結果的表達式。字面值是常量表達式,用常量表達式初始化的const值也是常量表達式。

const int a=20;//常量表達式 const int b=a+10;//常量表達式 const int z=get();//不是常量表達式

也就是說用來初始化的對象必須先是常量表達式。

一般用constexpr就好,如果有問題會報錯。(constexpr究竟如何使用也是未知,完全搞不清楚)。

11.auto和decltype auto讓編譯器幫我們推算出類型,以及值。頂層const會被忽略掉。

例如,const int i=2; auto a=i;這個r不是const的;

const int &r=i; auto b=r;這個也不是const的,並且不是引用,這個就是個int類型。

auto c=&r;這個才是const的,是因為非常量不能引用常量。

const int *p=&i;auto d=p;這個也是。

decltype則不一樣,返回的類型連const和引用都包含在內,

decltype(r) e=i;e是一個const引用;decltype(i) f=0;f是一個const;

12.數據結構是啥?是一組相關的數據元素組織起來然後使用它們的策略和方法。例如Sales_item就是把isbn號,單價和銷售總量組織在一起,並且提供了ISBN函數,+和<<等操作。

第二章 變量和基本類型