chapter 02 變量和基本類型

數(shù)據(jù)類型告訴我們數(shù)據(jù)的意義以及操作

2.1 基本內(nèi)置類型

2.1.1 算術(shù)類型

整形(包括字符和bool類型)产场、浮點型

C++中只規(guī)定了內(nèi)置類型的最小尺寸

2.1.2 類型轉(zhuǎn)換

尤其注意帶符號和不帶符號之間的轉(zhuǎn)換

2.1.3 字面值常量
(literal)eg:42|'a'|"Hello world!"|nullptr|false

轉(zhuǎn)義序列

eg:\n|\t|\\|\?

可以通過加前后綴的方法指定字面值常量的類型

L'a'|42ULL

2.2變量

提供一個具名的秕铛、可供程序操作的存儲空間

2.2.1 變量定義

類型說明符 一個多個變量名(逗號隔開);

 int a,b,c;

對象和變量一般互換使用,對象通常指的是一塊能存儲數(shù)據(jù)并具有某種數(shù)據(jù)類型的內(nèi)存空間.
對變量初始化是習(xí)慣必要的迷守,初始化與賦值不同
用列表初始化可以方便的檢測出初始值是否用丟失信息的風(fēng)險eg: ing a={0};
默認(rèn)初始化:定義與任何函數(shù)體外的變量被初始化為0,其它值被默認(rèn)初始化(初始值是多少奸晴?),例外情況:定義于函數(shù)體內(nèi)的內(nèi)置類型變量不會被初始化。因此對變量初始化是習(xí)慣必要的

2.2.2 變量聲明和定義

C++支持分離式編譯介返,允許程序分割為若干文件盯腌,每個文件可以獨立編譯,如何在文件間共享代碼?

聲明使名字被程序所知,一個文件想要使用別處定義的名字就必須包含對那個名字的聲明鬼譬。定義創(chuàng)建了與名字相關(guān)聯(lián)的實體

聲明 extern int i;
定義 int j;

只要顯示初始化變量就看作定義變量,如果想在多個文件中共用同一個變量,聲明變量必須分離,聲明能有多次租幕,定義只能有一次

2.2.3 標(biāo)識符

由字母、數(shù)字拧簸、下劃線組成劲绪,必須以字母、下劃線開頭

注意使用命名規(guī)范提高程序可讀性
變量名用小寫字母盆赤,類名用大寫字母開頭贾富、多個單詞間隔開

2.2.4 作用域

C++作用域用{}分隔

2.3復(fù)合類型

基于其他類型定義的類型,這里重點介紹引用和指針

2.3.1 引用

左/右值引用,右值引用是對內(nèi)置類講的牺六,這里指左值引用.引用類型必須和其引用對象類型一致

int ival=1;
int &refVal=ival;
int &refVal4=10;\\error 引用類型初始值必須為一個對象

引用必須被初始化颤枪,因為引用只是給另外一個已經(jīng)存在的對象起了別名,所以引用必須綁定.同理沒有引用的引用,一旦綁定就不能綁定到其他對象

2.3.2 指針

pointer 指向另外一個類型的負(fù)荷類型淑际,和應(yīng)用類似實現(xiàn)了其他對象的間接訪問畏纲,但是1 指針本身是一個對象扇住;2 指針無需定義時賦值,當(dāng)然建議初始化盗胀。

int *p1,*p2;//指針定義
double dval,*dp2;
dp2=&dval;
int ival=42;
int *p=&ival;//取地址符 &獲取對象地址
cout<<*p;//解地址符*
p=&dval;//error

指針非常復(fù)雜以后接觸到再說

空指針
int *p1=nullptr; //等價于 int *p1=0;
int *p2=0; //#include cstdlib
int *p3=NULL;//等價于 int *p3=0;

nullptr是C++11剛引入的艘蹋,是一種特殊類型的字面值,可以轉(zhuǎn)換為任意其他指針類型票灰,最好使用nullptr而不是NULL女阀。

賦值

和引用不同,指針和其他變量一樣可以給指針賦值屑迂。

void* 指針

是一種特殊的指針類型,可以存放任意對象地址,void*指針中存放了一個地址浸策,里面具體放了什么類型對象,并不知道惹盼。
void *視角看內(nèi)存空間就是內(nèi)存空間庸汗,沒辦法訪問內(nèi)存空間對象.

double obj=3.14;
int ival=3;
void *pv=&obj;
pv=&ival;
2.3.3 理解符合類型的申明
int *p;//*修飾的是p,并不是int
//類型修飾符只是聲明符的一部分
int *p1,*p2;

指向指針的指針

int **p1,***p1;//依次類推
int ival=1024;
int *pi=&ival;
int **pi=π

不能定義指向引用的指針手报,但是存在指針的引用
理解類型是什么蚯舱,最簡單的方法是從右到左閱讀r的定義,離變量名最近的符號對變量類型有最直接的影響

int i=21;
int *p;
int *&r=p;//對指針p的引用
r=&i;//相當(dāng)于p=&i
*r=0;//后果i=0

2.4 const

const 標(biāo)志變量類型是常量,必須初始化。
因為在編譯時昧诱,會把出現(xiàn)這個常量的地方,全部替換對應(yīng)初始值.

const int buff_size=1024;

注意 const對象被設(shè)定為僅在文件內(nèi)有效
如果想要在文件間共享所袁,如果是常量表達(dá)式盏档,使用extern聲明就好。
如果不是常量表達(dá)式燥爷,則需要在不論在定義還是聲明都是用extern

extern const int bufsize

同時在具體定義時使用

extern const int bufsize=fun();
2.4.1 對常量的引用

必須使用常量類型的引用來引用常量蜈亩,常量引用只是對引用可以參與的操作做了限制

const int ci=1;
const int &r1=ci;

常量引用可以綁定非常量對象,非常量引用并不能綁定常量對象

double dval=3.14;
const int &ri=dval;
//會發(fā)生以下事件
const int temp=dval;
const &ri=temp;
//顯然如果是對非常量引用這么操作是沒有意義的前翎,
//因為如果是非常量引用稚配,
//你肯定是想改變dval的值,顯然是不可能的港华,
//所以只有常量引用才會過編譯
2.4.2 指針和const

指向常量的指針道川,同常量引用類似,都是指向?qū)ο蟮某A恐羔樆蛘咭昧⒁耍僮魇艿较拗泼疤选V赶虻膶ο笫遣皇浅A浚⒉魂P(guān)心橙数。
常量指針 const指針 不允許改變指針本身的值,但是如果指向的不是常量尊流,就可以改變指針指向的值

int num=9;
int *const curErr=&num;
注意與const int *p的區(qū)別
2.4.3 頂層const

top-level const 表示指針本身是常量,一般化 表示任意對象是常量

low-level const 表示指針指向的對象 是常量灯帮,一般化 與指針和引用等符合類似的基本類型部分相關(guān)崖技,底層const拷貝時逻住,拷出對象必須具有相同的const資格,或者兩個對象的數(shù)據(jù)類型可以相互轉(zhuǎn)換迎献,譬如非常量轉(zhuǎn)換常量

2.4.4 常量表達(dá)式與constexpr
  1. 值不會變
  1. 在編譯是就可以得到計算結(jié)果的表達(dá)式

C++11新標(biāo)準(zhǔn)規(guī)定使用constexpr聲明變量有編譯器驗證變量是否是一個常量表達(dá)式
字面值類型
可以被定義成constexpr的類型瞎访,稱為字面值類型,literal type
指針和constexpr
constexpr聲明中如果定義一個指針忿晕,constexpr會把指針變?yōu)轫攲觕onst

constexpr int *p=nullptr;\\一個頂層非底層const指針
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末装诡,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子践盼,更是在濱河造成了極大的恐慌鸦采,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件咕幻,死亡現(xiàn)場離奇詭異渔伯,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)肄程,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進(jìn)店門锣吼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人蓝厌,你說我怎么就攤上這事玄叠。” “怎么了拓提?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵读恃,是天一觀的道長。 經(jīng)常有香客問我代态,道長寺惫,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任蹦疑,我火速辦了婚禮西雀,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘歉摧。我一直安慰自己艇肴,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布叁温。 她就那樣靜靜地躺著豆挽,像睡著了一般。 火紅的嫁衣襯著肌膚如雪券盅。 梳的紋絲不亂的頭發(fā)上帮哈,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天,我揣著相機(jī)與錄音锰镀,去河邊找鬼娘侍。 笑死咖刃,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的憾筏。 我是一名探鬼主播嚎杨,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼氧腰!你這毒婦竟也來了枫浙?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤古拴,失蹤者是張志新(化名)和其女友劉穎箩帚,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體黄痪,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡紧帕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了桅打。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片是嗜。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖挺尾,靈堂內(nèi)的尸體忽然破棺而出鹅搪,到底是詐尸還是另有隱情,我是刑警寧澤遭铺,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布丽柿,位于F島的核電站,受9級特大地震影響掂僵,放射性物質(zhì)發(fā)生泄漏航厚。R本人自食惡果不足惜顷歌,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一锰蓬、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧眯漩,春花似錦芹扭、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至队萤,卻和暖如春轮锥,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背要尔。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工舍杜, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留新娜,地道東北人。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓既绩,卻偏偏與公主長得像概龄,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子饲握,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容