一、基本內置型別 base build-in type【算數型別/型別轉換/字面值常量】
基本內置型別(算數型別arithmetic type(整型integral type(字符,布爾bool),浮點型(單精度float,雙精度double,擴展精度ex)),空型別void)
//算數型別arithmetic type
C++標準規定尺寸最小值,具體還得看編譯器,
基本字符型別(機器位元組char,自然語言Unicode:char16_t,char32_t);
byte位元組->大多數 8bit->可尋址最小記憶體塊;
word 字->大多數 32bit/64bit->存盤的基本單元;
signed/unsigned 符號/無符號:unsigned=unsigned int;字符型 char/signed char/unsigned char各不相同,其中char/unsigned char由編譯器決定,
eg:內置型別機器實作 1word=4byte=4*8bit

型別,決定了資料所占的bit數,以及,該如何解釋這些bit內容,
tip:選擇型別時
無負數值 -> unsigned;
超過int -> long long;
整數(不大) -> signed/unsigned char;
浮點數 -> double;
//型別轉換convert
定義definition:(條件condition:型別type=資料data+運算operation)一種被大多數型別支持的運算,
不可移植性nonportable:程式依賴現實環境(將int尺寸看成不變的值);
給signed type賦值 超出范圍->undefined未定義;
給unsigned type賦值 超出范圍->此type取模后的余數;
eg:int尺寸為4byte;2^32=4294967296;
unsigned ui=10; int i=-42;
ui+i=10+(2^32-42)=4294967264;
unsigned u1=42,u2=10;
u2-u1=10-42+2^32;
ps:while/for中unsigned要小心 i++/++i;
//字面值常量literal
literal的data type由其形式和值決定,
switch(type){
case 整型/浮點型:
十進制:int~long long;//十進制字面值不會為 負,即“-”不保存在字面值內
八進制0,十六進制0x:(signed/unsigned)int~long long;
short無字面值;
case 字符/字串:
char -> ' '
string -> " " ->陣列array(+'\0',length+1)
//tip:格式 std::cout<<"hello" "world"<<std::endl;
case bool:
true/false;
case pointer:
nullptr;
case 轉譯序列:
nonprintable:\n \t \v
單引號/雙引號/問好/反斜線:\' \" \? \\
和字符集相關:(此處為Java語言)

case ex_指定:
前綴:L、U、u、u8;
后綴(不分大小寫):U、L、LL;F、L;
}
二、變數variable【定義/宣告/識別符號/存盤空間/作用域】
definition:有名字可操作的存盤空間;
變數variable=物件object-值value(只讀),
//定義definition(type+name+space)
初始化initialized:創建時賦值;
ps:賦值:擦除->替代;
默認初始化default initialized:(condition:type+location(函式體function body))外:有默認值;內:build-in type->uninitialized;
ps:目前書上就寫了這么多,先將就著往下看吧,
串列初始化list initialization:
//初始化int units_sold 為0,C++11均可全面應用
int units_sold=0;
int units_sold={0};
int units_sold{0};
int units_sold(0);
//串列初始化+風險資訊=編譯報錯 long double pi=3.1415926536; int a{pi},b={pi};//錯誤:存在丟失風險 int c(pi),d=pi;//正確:確實丟失
tip:初始化每一個build-in type變數,因為編譯器不想找你這個錯誤,
//宣告declaration(type+name)
分離式編譯separate compilation,定義只能一次,要用的話宣告就好啦;
extern int i;//不可初始化:搞不懂的話請看宣告的定義
C++是靜態型別statically typed語言,有型別檢查type checking:看此type是否支持此operation,
//識別符號identifier
錯:{
_ _xx;
_Xxx;
_xxx;//function body外
關鍵字key;
運算子代替名:and/or/bitand/,,,;
}
//作用域scope
同名+不同位置=不同物體;
global scope;block scope;inner/outer scope(就近原則);
「p44 ::xxx」//意思意思,想不起來的話看書去
三、復合型別compound type【參考/指標/宣告】
//參考reference(lvalue reference)
參考本身不是物件object,所以不能definition,只能說系結bind,因為要bind,所以必須初始化,
參考不支持型別轉換,//emm... 這句話有骨頭可挑,可我的意思不是你理解的我的意思
int iVal=1024; int &refVal=iVal; int &refVal_=refVal;
//指標pointer
pointer是一個物件,
指標可做condition,nullptr:false,
可定義無初始值,默認初始化同function body內的build-in type:uninitialized,
取地址符&;解參考符*,
int *p=&iVal; //不能定義指向參考的指標
空指標null pointer:
int *p=nullptr;//best way int *p=0;//不能把int變數直接賦值給指標,很繞,請看書 int *p=NULL;//#include<cstdlib>的預處理變數preprocessor variable
void* 指標:
可存放任意物件的地址/任意型別指標,但不能直接操作其物件,記憶體空間僅僅是記憶體空間,
tip:請初始化所有指標,
指向指標的指標的指標:
int iVal=1024,*pi=&iVal; int ***pppi=π
指向指標的參考:
int *&r=pi;//就近原則,r參考是一個指標,r參考指標是int型 r=&iVal;//r參考指標,令pi指向I *r=0;//r參考指標,解參考得i,即i=0
//宣告declaration(up,一部分內容已整合)
同一條definition陳述句,base type只有一個,但宣告符形式可不同,因為宣告符包含型別修飾符,
int* p1,p2;//p1是指標,p2是int
int*/int *:強調重點不一樣,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/59719.html
標籤:C++
上一篇:[干貨]淺談如何為變數命名
下一篇:常成員函式
