術(shù)語(yǔ)“流”(stream)想要表達(dá)的是,隨著時(shí)間的推移,字符是順序生成或消耗
的
寫(xiě)入endl的效果是結(jié)束當(dāng)前行雇逞,并將與設(shè)備關(guān)聯(lián)的緩沖區(qū)(buffer)中的內(nèi)容刷到設(shè)備中
前綴std::指出名字cout和endl是定義在名為std的命名空間(namespace)中的。命名空間可以幫助我們避免不經(jīng)意的名字定義沖突,以及使用庫(kù)中相同名字導(dǎo)致的沖突柜去。
作用域運(yùn)算符(::)
類定義了行為(類定義了對(duì)象可以執(zhí)行的所有動(dòng)作)
成員函數(shù)(member function) 是定義為類的一部分的函數(shù),有時(shí)也被稱為方法(method)拆宛。
點(diǎn)運(yùn)算符(.)只能用于類類型的對(duì)象
調(diào)用運(yùn)算符(())來(lái)調(diào)用一個(gè)函數(shù)嗓奢。調(diào)用運(yùn)算符是一對(duì)圓括號(hào)
條件(condition)求值結(jié)果為真或假的表達(dá)式。通常用值0表示假浑厚,用非零值表示真
數(shù)據(jù)類型是程序的基礎(chǔ):它告訴我們數(shù)據(jù)的意義以及我們能在數(shù)據(jù)上執(zhí)行的操作
一個(gè)char的空間應(yīng)確惫傻ⅲ可以存放機(jī)器基本字符集中的任意字符對(duì)應(yīng)的數(shù)字值。也就是說(shuō)钳幅,一個(gè)char的大小和一個(gè)機(jī)器字節(jié)一樣物蝙。
為了賦予內(nèi)存中某個(gè)地址明確的含義,必須首先知道內(nèi)存在該地址的數(shù)據(jù)的類型敢艰。類型決定了數(shù)據(jù)所占的比特?cái)?shù)以及該如何解釋這些比特的內(nèi)容诬乞。
大多數(shù)程序員能夠(也應(yīng)該)對(duì)數(shù)據(jù)類型的使用做出限定從而簡(jiǎn)化選擇的過(guò)程。
- 當(dāng)明確知曉數(shù)值不可能為負(fù)時(shí)钠导,選用無(wú)符號(hào)類型
- 使用int執(zhí)行整數(shù)運(yùn)算
- 在算數(shù)表達(dá)式中不要使用char或bool震嫉,因?yàn)閏har在一些機(jī)器上是有符號(hào),另一些機(jī)器上可能沒(méi)有符號(hào)牡属。如果需要使用一個(gè)不大的整數(shù)票堵,可以明確指定類型是signed char 或者unsigned char
- 執(zhí)行浮點(diǎn)數(shù)運(yùn)算選double
把一個(gè)布爾值賦值給非布爾類型是,初始值為false則結(jié)果為0逮栅,初始值為true則結(jié)果為1
當(dāng)我們賦給無(wú)符號(hào)類型一個(gè)超出它表示范圍的值時(shí)悴势,結(jié)果是初始值對(duì)無(wú)符號(hào)類型表示數(shù)值的總數(shù)取模后的余數(shù)窗宇。 把 -1賦值給8bit大小的unsigned char所得的結(jié)果是255
計(jì)算機(jī)中數(shù)值按補(bǔ)碼存儲(chǔ)的,-1的原碼是10000001(有符號(hào)8位)瞳浦,補(bǔ)碼(反碼+1):11111111担映。所以直接賦值給unsigned char, 11111111等于255。
變量提供一個(gè)具名的叫潦,可供程序操作的儲(chǔ)存空間蝇完。c++中的每個(gè)變量都有其數(shù)據(jù)類型,數(shù)據(jù)類型決定著變量所占內(nèi)存空間的大小和布局方式矗蕊、該空間能存儲(chǔ)的值的范圍短蜕,以及變量能參與的運(yùn)算。對(duì)c++程序員來(lái)說(shuō)傻咖,“變量”(variable)和“對(duì)象”(object)一般可以互換使用朋魔。
對(duì)象是指一塊能存儲(chǔ)數(shù)據(jù)并具有某種類型的內(nèi)存空間
初始化不是賦值,初始化的含義是創(chuàng)建變量時(shí)賦予其一個(gè)初始值卿操,而賦值的含義是把對(duì)象的當(dāng)前值擦除警检,而以一個(gè)新值來(lái)替代。
如果想聲明一個(gè)變量而非定義它害淤,就在變量名前添加關(guān)鍵字extern扇雕,而且不要顯式地初始化變量:
extern int i;
//聲明i 而非定義i
extern double pi = 3.1416;
// 定義
在函數(shù)體內(nèi)部,如果試圖初始化一個(gè)由extern關(guān)鍵字標(biāo)記的變量窥摄,將引發(fā)錯(cuò)誤
變量能且只能被定義一次镶奉,但是可以被多次聲明
通常將聲明符寫(xiě)成&d的形式來(lái)定義引用類型
int val = 1024;
int &refVal = val; //refVal指向val (是val的另一個(gè)名字)
int &refVal2; //報(bào)錯(cuò):引用必須被初始化
int &refVal3 = refVal // refVal3綁定到了那個(gè)與refVal綁定的對(duì)象上,這里就是綁定到val上
引用并非對(duì)象崭放,相反的哨苛,它只是為一個(gè)已經(jīng)存在的對(duì)象所起的另外一個(gè)名字。
因?yàn)橐帽旧聿皇且粋€(gè)對(duì)象币砂,所以不能定義引用的引用
引用只能綁定在對(duì)象上建峭,而不能與字面值或某個(gè)表達(dá)式的計(jì)算結(jié)果綁定在一起。
指針(pointer)是“指向”(point to)另外一種類型的符合類型决摧。與引用類似迹缀,指針也實(shí)現(xiàn)了對(duì)其他對(duì)象的間接訪問(wèn)。然而指針與引用相比又有很多不同點(diǎn)蜜徽。
- 指針本身就是一個(gè)對(duì)象,允許對(duì)指針賦值和拷貝票摇,而且在指針的生命周期內(nèi)他可以先后指向幾個(gè)不同的對(duì)象拘鞋。
- 指針無(wú)須在定義時(shí)賦初值。和其它內(nèi)置類型一樣矢门,在塊作用域內(nèi)定義的指針如果沒(méi)有被初始化盆色,也將擁有一個(gè)不確定的值灰蛙。
獲取對(duì)象的地址
指針存放某個(gè)對(duì)象的地址,要想獲取該地址隔躲,需要使用取地址符(操作符&)
int ival = 42;
int *p = &ival; // p存放變量ival的地址摩梧,或者說(shuō)p是指向變量ival的指針
引用不是對(duì)象,沒(méi)有實(shí)際地址宣旱,所以不能定義指向引用的指針
如果指針指向了一個(gè)對(duì)象仅父,則允許使用解引用符(操作符*)來(lái)訪問(wèn)改對(duì)象
int ival =42 ;
int *p = &ival; // p存放著變量ival的地址,或者說(shuō)p是指向變量ival的指針
cout << *p // 由符號(hào)*得到指針p所指的對(duì)象浑吟,輸出42
*p = 0; //有符號(hào)*得到指針p所指向的對(duì)象笙纤,即可經(jīng)由p為變量ival賦值
cout << *p; //輸出0
指針和引用都能提供對(duì)其他對(duì)象的間接訪問(wèn),然后在具體實(shí)現(xiàn)細(xì)節(jié)上二者有很大的不同组力,其中最重要的一點(diǎn)就是引用本身并非一個(gè)對(duì)象省容。一旦定義了引用,就無(wú)法令其再綁定到另外的對(duì)象燎字,之后每次使用這個(gè)引用都是訪問(wèn)它最初綁定的那個(gè)對(duì)象腥椒。