2.1 算術類型
bool char character 8 wchar_t wide character 16 char16_t Unicode character 16 char32_t Unicode character 32 short short integer 16 int integer 16 long long integer 32 long long 64 float single-precision floating-point 6 significant digits double double-precision floating-point 10 significant digits long double extended-precision floating-point 10 significant digits
char_t類型保證機器最大擴展字符集中任意字符都可以存儲
char16_t和char32_t為unicode字符集服務
比特bit、字節byte、字word
1byte=8bit
word的大小與機器有關,一般為4byte
signed和unsigned
對於char類型來說,其實現在不同的機器上可能是不同的,有些是signed,有些則是unsigned,因此在需要用char進行數學算術運算的時候,應該指明符號。
將一個負數,強制轉換為一個無符號的數字的時候,結果為這個負數加上無符號數的模。
例如,將-1轉換為unsigned short:unsigned short的模為65536,則unsigned short(-1)的結果為65535
更深刻的理解是,將一個負數轉換成無符號數字的時候,直接是將其補碼的符號位1,當做正常的無符號數字解讀,其內存中的數據沒有變化,如下:
cout<<short(0xffff)<<endl; //輸出-1 cout<<unsigned short(0xffff)<<endl; //輸出65535 cout<<unsigned short(short(0xffff))<<endl; //輸出65535
進制表示
15 十進制,015 八進制,0x15十六進制
字符串可以分行書寫
cout<<"姓名 學號\n" "王五 0125";
轉義序列
\后緊跟1-3個八進制數字
\x后緊跟1-*個十六進制數字
字面值前后綴
前綴
u Unicode 16字符 char16_t
U Unicode 32字符 char32_t
L 寬字符 wchar_t
u8 UTF-8 char[]字符串
后綴
u/U unsigned
l/L long
ll/LL long long
f/F float
l/L long double
類型可以組合,比如42ULL為unsigned long long
2.2 變量
變量初始化
int value1 = 0; int value2 = {0}; int value3(0); int value4{0}; //以上四個效果相同 vector<int> value5{1, 2, 3, 4, 5};//存儲了1 2 3 4 5 vector<int> value6(10,-1);//存儲了10個-1
內置類型(int、double、char)在定義時如果沒有給定初始值,將不被初始化。
訪問全局變量
int value=10; int main() { int value=5;//覆蓋了全局變量value int newValue=::value;//使用::訪問全局變量 }
2.3 復合類型
引用reference
int &rValue=value; 變量或者對象的別稱,占用同一塊內存,在聲明引用的時候必須初始化,初始化后不可改變引用的變量或對象。
指針pointer
int *pValue=&value; 聲明一個變量,其存儲的是另外一個變量的地址。
空指針:
int *pValue=nullptr;
int *pValue=0;
int *pValue=NULL; //需要include<cstdlib>
void *指針
任何類型都可以用void*指針,可以認為void*指針就是對應一塊內存區域。
2.4 const限定符
指針和const
const int value = 32; //value對應的內存不能改變 //指向常量的指針pointer to const const int *cpValue = &temp; //cpValue對應的內存可以改變(可以重新指向另一個變量),但是temp不可以通過cpValue改變(指向的變量不能更改) //常量指針const point int *const pcValue = &temp; //pcValue對應的內存不能更改(不可以重新指向另一個變量),temp可以通過pcValue更改(指向的變量可以更改) //指向常量的常量指針 const int *const cpcValue = &temp;//都不可以更改
補充:const int *const p = &value,其中第二個const是頂層,限制p的內存不能更改;第一個const是底層,限制指向的內存不能改。
constexpr和常量表達式
常量表達式指的是在編譯的時候就可以確定的值的常量。
比如下邊兩個都是常量表達式:
const int max_files = 20; const int limit = max_files + 1;
但是有時候不能確定一個語句是不是常量表達式,這就可以constexpr進行變量聲明,由編譯器驗證是不是常量表達式:
constexpr int limit = mf + 1;//只有當mf是編譯時確定值,表達式才能通過編譯
2.5 類型的處理方式
類型別名
typedef double wages, *pWages;//wages是double的別名,pWages是double*的別名
using db = double;//C++11中支持的
auto
auto item = v1 + v2;//由編譯器推斷item的類型
decltype
選擇並返回操作數的數據類型
decltype( f() ) sum = x;
當操作數加括號,表示操作數的引用類型
decltype( (f()) ) sum = x;
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。