《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操作後再用