C++ Primer第二章娇跟!
#include "stdafx.h"
#include<iostream>
using namespace std;
int main()
{
bool bl = true;
char c = 'c'; //與機(jī)器字節(jié)一樣岩齿,大多數(shù)機(jī)器字節(jié)由8比特構(gòu)成。
wchar_t wc = 'c';
char16_t c16 = 'c'; //為Unicode字符集服務(wù)苞俘№锷颍可以儲(chǔ)存unicode的字符,而char也只能儲(chǔ)存ANSI字符吃谣!
char32_t c32 = 'c'; //為Unicode字符集服務(wù)乞封。
short st = 1;
int it = 1;
long lt = 1;
long long llt = 1;
float ft = 0.1; //1字節(jié)表示做裙,7個(gè)有效位。
double dt = 0.1; //2字節(jié)表示肃晚,16個(gè)有效位锚贱。
long double ldt = 0.1;
//應(yīng)該避免混用帶符號(hào)類型和無符號(hào)類型!在無符號(hào)類型進(jìn)行減法運(yùn)算時(shí)关串,應(yīng)該保證不為負(fù)數(shù)拧廊!
unsigned char i1 = -1;
cout << int(i1) << endl; //unsigned char,賦值-1晋修,所得結(jié)果為255吧碾。10000001原碼-11111110反碼-11111111補(bǔ)碼
unsigned u2 = 10;
int i2 = -42;
cout << i2 + i2 << endl;
cout << u2 + i2 << endl; //int值轉(zhuǎn)換為無符號(hào)值,導(dǎo)致異常結(jié)果
unsigned u3 = 42, u4 = 10;
cout << u3 - u4 << endl;
cout << u4 - u3 << endl; //必須確保無符號(hào)變量不可能為負(fù)值飞蚓,否者會(huì)導(dǎo)致未知錯(cuò)誤滤港,當(dāng)應(yīng)用于循環(huán)時(shí)尤其注意。
//初始化不是賦值趴拧,初始化是創(chuàng)建變量時(shí)賦予一個(gè)初始值,而賦值是把對(duì)象的當(dāng)前值擦除并以一個(gè)新值取代山叮。
int i3 = 1;
int i4(1);
int i5 = { 0 }; //列表初始化著榴,C11新規(guī)定。列表初始化屁倔,當(dāng)發(fā)生精度損失時(shí)脑又,會(huì)報(bào)告錯(cuò)誤!
int i6{ 0 };
double pi = 3.1415926;
int i7 = pi;
//int i8{ pi }; //當(dāng)初始值存在丟失信息時(shí)锐借,使用列表初始化會(huì)報(bào)錯(cuò)问麸!
//在函數(shù)體內(nèi)部的內(nèi)置類型變量不被默認(rèn)初始化,其變量值是未定義的钞翔;在函數(shù)體之外的變量被初始化為0严卖。所以,顯示初始化變量是非常必要的布轿!
//每個(gè)類決定其初始化對(duì)象方式哮笆,例如string默認(rèn)初始化為空串。由類的默認(rèn)構(gòu)造函數(shù)決定汰扭!
//變量的命名規(guī)范:標(biāo)識(shí)符要體現(xiàn)實(shí)際含義稠肘;變量名一般用小寫字母;用戶自定義的類名用大寫字母開頭萝毛;如果標(biāo)識(shí)符由多個(gè)單詞組成项阴,則單詞間應(yīng)有明顯區(qū)分。
int ival = 1024;
int &refVal = ival; //引用笆包,即對(duì)象別名环揽,程序?qū)⒁煤退某跏贾到壎缘础R帽仨毐怀跏蓟? int *pVal = &ival; //指針,指針本身就是一種對(duì)象薯演。但是也建議進(jìn)行空指針初始化撞芍!
cout << refVal << " " << *pVal << endl;
//空指針,注意不能把int變量直接賦給指針。
int *p1 = nullptr;//c++推薦方式跨扮!
int *p2 = 0;
int *p3 = NULL;
//void*指針
void *p4;
//int *p5 = static_cast<int*>(p4);//強(qiáng)制類型轉(zhuǎn)換序无。
//指向指針的指針
int ival2 = 1024;
int *p_ival2 = &ival2;
int **pp_ival2 = &p_ival2;
cout << ival2 << "-" << *p_ival2 << "-" << **pp_ival2 << endl;
//指針是對(duì)象,所以有引用
int ival3 = 1024;
int *pi_ival3 = &ival3;
int *&r_p_ival3 = pi_ival3;
//const限定符衡创,指向常量的引用
const int ival3 = 1314; //cosnt對(duì)象創(chuàng)建時(shí)必須初始化帝嗡!
const int ival4 = ival2; //利用一個(gè)對(duì)象去初始化const對(duì)象。
//extern const int ival5 = 1024; //如果想在多個(gè)文件之間共享const對(duì)象璃氢,必須在對(duì)象定義時(shí)加上extern哟玷。
const int &r_ival3 = ival3; //cosnt常量引用,引用ival3對(duì)象一也。常量引用綁定非常量對(duì)象巢寡、字面值;非常量引用不允許綁定常量對(duì)象椰苟。
//指向常量的指針
const int *p_ival3 = &ival3; //類似于指向常量的引用抑月。
//常量指針,即指針對(duì)象地址不能修改。
int *const pp_ival3 = &ival3; //指針將一直指向ival3.
//指向常量的常量指針
const int *const ppp_ival3 = &ival3;
//頂層const和底層const
//頂層const表示(指針)本身是個(gè)常量;底層const表示指針?biāo)傅膶?duì)象是一個(gè)常量渡嚣。
//const(底層) int *const(頂層) pp_ival3 = &ival3;
//常量表達(dá)式:值不會(huì)改變并且在編譯過程就能得到計(jì)算結(jié)果。
const int ival6 = ival3 + 520;
//將變量聲明為constexpr层皱,便由編譯器來驗(yàn)證變量是否是一個(gè)常量表達(dá)式。
constexpr int ival7 = 520; //如果確定變量為常量赠潦,則就把它聲明為constexpr叫胖。
//算術(shù)類型、應(yīng)用和指針都是字面值類型祭椰,可以被定義為constexpr臭家;而自定義類型string則不能!
constexpr int *q = nullptr; //如果constexpr定義指針方淤,將所定義的對(duì)象置為頂層const钉赁。
//類型別名
typedef double wages; //wages是double的同義詞,p是double*的同義詞携茂。
using uwages = wages; //C++新的規(guī)定你踩,別名聲明
typedef wages *p;
//auto類型說明符,通過初始值來推算變量的類型
auto ai = 1;
//auto一般會(huì)忽略掉頂層const,如果希望推斷頂層const带膜,則需要明確指出
const auto cai = 2;
//還可以將引用的類型設(shè)為auto吩谦,此時(shí)頂層常量屬性仍然保留
auto &rai = ai;
//decltype類型指示符,返回操作數(shù)的數(shù)據(jù)類型,包括頂層const和引用在內(nèi)膝藕。即推斷指針為引用式廷,推斷函數(shù)為函數(shù)類型!
decltype(ai) dai = 2;
//特別用法
int di = 1, *dpi = &di, &dr = di;
decltype(dr + 0) b; //返回類型為int
decltype(*dpi) dc = dr; //返回類型為int&
decltype((di)) drr = dr;//雙括號(hào)的結(jié)果永遠(yuǎn)是引用
//自定義數(shù)據(jù)結(jié)構(gòu)
class Sales_data
{
string bookNo;
unsigned units_sold = 0; //類內(nèi)初始值芭挽,推薦使用值初始化滑废。
double revenue = 0.0;
};
Sales_data data1, data2; //類通常被定義在頭文件中,而類所在頭文件的名字應(yīng)與類的名字一樣袜爪。
//頭文件保護(hù)符,避免頭文件被多次包含蠕趁,從而導(dǎo)致重復(fù)定義
// #ifndef SALES_DATA_H
// #define SALES_DATA_H
// #include<string>
// /*聲明和定義*/
// #endif
cin.ignore();
return 0;
}
//C++定義了算術(shù)類型和空類型,其中算術(shù)類型包括字符辛馆、整數(shù)俺陋、布爾值、浮點(diǎn)數(shù)昙篙。
//帶符號(hào)包含正數(shù)腊状、負(fù)數(shù)、零苔可;不帶符號(hào)包含大于等于0的值寿酌。不帶符號(hào)聲明:unsigned int i=1。
//signed char表示-128~127硕蛹,unsigned char表示0~255,不要聲明char硕并。
//當(dāng)明確知曉數(shù)值不可能為負(fù)時(shí)法焰,選用無符號(hào)類型;如果你的數(shù)值超出int范圍倔毙,選用long long埃仪;在算術(shù)表達(dá)式中不要使用char和bool,只有存放字符和布爾值時(shí)才使用它陕赃;執(zhí)行浮點(diǎn)運(yùn)算選用double卵蛉。
//內(nèi)置類型轉(zhuǎn)換:0為false,否則為true么库;false為0傻丝,true為1;浮點(diǎn)數(shù)到整數(shù)诉儒,僅保留整數(shù)部分葡缰;整數(shù)轉(zhuǎn)浮點(diǎn)型,小數(shù)部分為0,如果整數(shù)所占空間超過浮點(diǎn)型容量泛释,否則精度有可能損失滤愕;給帶符號(hào)類型超范圍值,結(jié)果是未定義的怜校;
第二章介紹了C++基本的數(shù)據(jù)類型(算術(shù)型+引用+指針)及其用法间影,另外也講解了C++對(duì)于復(fù)合類型的支持(類),