1. 程式人生 > >《C++ Primer 第六版》第三章

《C++ Primer 第六版》第三章

C艹的變數名的幾種簡單的規則

1.     在名稱中只能使用字母字元、數字和下劃線

2.     名稱的第一個字元不能是數字

3.     區分大寫字元與小寫字元

4.     不能將C艹關鍵字用作名稱

5.     一兩個下劃線或下劃線和大寫字母打頭的名稱被保留給實現(編譯器及其使用的資源)使用。以一個下劃線開頭的名稱被保留給實現,用作全域性識別符號

6.     C艹對於名稱的長度沒有限制,名稱中所有的字元都有意義,但有些平臺有長度限制

C艹中的整型

Char、short、int、long、long long其中每種型別都有符號版本和無符號版本,總共有10種類型可供選擇。Char型別有一些特殊屬性,最常用來表示字元,而不是數字。

C艹提供了一種靈活的標準,確保了最小長度(從C語言借鑑而來),不同系統的寬度並不一樣,要視系統而定

1.     Short至少16位

2.     Int至少與short一樣長

3.     Long至少32位,且至少與int一樣長

4.     Long long至少64位,且至少與Long一樣長

位元組byte通常指的是8位的記憶體單元,但是在C艹中對於位元組的定義與此不同。位元組可能取值的數目必須等於或超過字元數目。例如在ASCII和EBCDIC字符集中,它們都可以用8位來容納,所以在這兩種字符集系統中,C艹位元組通常包含8位,然而,在Unicode中,有些實現可能使用16或者32位的位元組,有些人使用術語八位組octct表示8位位元組

Sizeof是一個運算子,對型別名如Int使用sizeof運算子時,應將名稱放在括號內;但對變數名使用該運算子時,括號是可選的

C艹初始化的特殊方式:

首先是“=”不是必須的

其次{}內可以不包含任何東西,變數初始化為0

可以更好地防範型別轉換錯誤

Int hamburgers = {24};

Int hamburgers{};

選擇整型型別,通常int被設定為對目標計算機而言最為自然的長度。自然長度指的是計算機處理起來效率最高的長度。如果沒有非常有說服力的理由來選擇其他型別,則應用int。

三種進位制系統:10 8 16,三種表示方式雖然不同,但是都是為了表示方便,最終都會轉換成二進位制儲存在計算機中

int chest = 42;   //decimal integer literal

int waist = 0x42; //hexadecimal integer literal

int inseam=042;       //octal integer literal

Cout<<hex;

Cout<<oct;

在C++中,對於常量型別的變數會有幾種字尾

L ul

Ull ll ULL Ull

U u

char型別

專為儲存字元(如字母和數字)而設計的。它足夠長,能夠表示目標計算機系統中的所有基本符號-所有的字母、數字、標點符號等。實際上,很多系統支援的字元都不超過128個,因此用一個位元組就可以表示所有的符號。因此,雖然char最常用來處理字元,但也可以將它用作比short更小的整型。

Cout.put()函式 -用來顯示一個字元

句點被稱為成員運算子

通用字元名

說的是一些小語種一些獨特的字元,在ISO 10646編碼中會有特定的字元碼,用\u進行轉義

Char在C艹中預設情況下是既沒有符號也不是有符號。是否有符號由C++實現決定,這樣編譯器開發人員可以最大限地將這種型別與硬體屬性匹配起來

Unsigned char通常表示範圍為0-255 而signed char 表示範圍為-128到127

Wchar_t

在日文漢字系統中 程式需要處理的字符集可能無法用一個8位的位元組表示。 因此編譯器廠商可以將char定義為一個16位的位元組或更長的位元組,其次,一種實現可以同時支援一個小型字符集和較大的擴充套件字符集。8位的char表示基本字符集,wchar_t表示擴充套件字符集。Wchar_t是一種整數型別,它有足夠的空間。這種型別與另一種整型(underlying)的長度和符號屬性相同。對底層型別的選擇取決於實現,因此在一個系統中,他可能是unsigned short,而在另一個系統中,則可能是Int。

Cin與cout輸入輸出看作是char流,不適用與處理wchar_t,需要用wcin,wcout。另外可以通過加上字首L來指示寬字元常量和寬字串。

C艹11新增 char16_t char32_t均為無符號整型,另外

Char16_t = u’p’;

Char32_t = U”china”在2010上並不能實現,必須在15版本的才能實現

關於Bool型別,任何數字值或指標值都可以被隱式轉換為bool值,任何非零值都轉換為true,而零被轉換為false

Const 限定符,應在生命中對const進行初始化

Const比#define好的幾個點

1.     能夠明確指定型別

2.     可以使用C艹的作用域規則將定義的限制在特定的函式或檔案中

3.     可以將const用於更復雜的型別

浮點數在計算機中的儲存

浮點數被分為兩部分儲存,一部分表示值,另一部分用於對值進行放大或縮小。

縮放因子的作用是移動小數點的位置,術語浮點因此而得名。不過C艹內部的浮點是基於二進位制數,因此縮放因子是2的冪,不是10的冪

在用e指數的表示法時數字中不能有空格 如7.2 E6是不合法的

3中浮點型別 float  double long double

有效位的概念

Float至少32位有效位

Double至少48位有效位,且不少於float

Long double至少和double一樣多

這三種類型的有效位數可以一樣多。

指數範圍至少是-37到37

Floatnum.cpp

通常cout會刪除結尾的零,呼叫cout.setf()將覆蓋這種行為,至少在新的實現中是這樣

Fltadd.cpp

在這個編譯器中float型別能表示數字中的前6位或前7位,在修改超出這個範圍的值時顯得毫無意義。因此會得出0的結果,實際上為1.

整型和浮點型統稱為算數型別。

Arith.cpp

對於float,C艹只保證6位有效數位,精度的概念是一個雷區。

通常情況下,浮點型的常量在C艹中被認為是double型的

VS2015貌似對這種轉換直接給X掉了並不能夠通過編譯。

const int code = 66;

    int x = 66;

    char c1 = { 31325 };      //narrowing, notallowed

    char c2 = { 66 };              //allowedbeacuse char can hold 66

    char c3 = { code };            // ditto

    char c4 = { x };               //notallowed, x is not constant

    x = 31235;

    char c5 = x;                   //allowedby this form of initialization

c5最後會被初始化為3’\x’

在同一個表示式中包含兩種不同的算數型別時,C艹將執行兩種自動轉換:首先,一些型別在出現時便會自動轉換:其次,有些型別在與其他型別同時出現在表示式中時將被轉換。

    在計算表示式時,C艹將bool、char、unsigned char、signed char 和short值轉換為int。具體地說,true被轉換為1,false被轉換為0.這些轉換被稱為整型提升(integral promotion)

(long)thorn C式         兩種不同的強轉方式

Long(thorn)  C艹式

強制轉換運算子 static_cast<>  15章介紹

C艹11中新增的AUTO宣告。但是並不合適普通的型別如

Auto x = 0.0                //x is double

Double y = 0;              // y is double

Auto z = 0;                  //z is int, because 0 is int

處理複雜型別,如標準模板庫STL中的型別時,自動型別推斷有時才能顯現出來。例如

Std::vector<double> scores;

Std::vector<double>::iterator pv =scores.begin();

C艹11允許您將其重寫為下面這樣:

Std::vector<double> scores;

Auto pv = scores.begin();

我覺得這段挺重要的,有些基礎的概念,你不看真的不知道是如何實現的。

A++ ++a

A++:      先用a後再操作a

++a:       先對a操作後再用