C++中文版本primer 第二章变量和基本类型 学习笔记
2.2變量
2.2.1 變量定義
列表初始化
- 定義一個(gè)名字為units_sold的int變量并初始化為0
- C++11 用花括號(hào)來(lái)初始化變量,上面這個(gè)步驟也稱(chēng)之為列表初始化。這種初始化有一個(gè)重要的特點(diǎn),如果在初始化信息的時(shí)候存在丟失信息的風(fēng)險(xiǎn)那么編譯器就會(huì)報(bào)錯(cuò)。丟失信息,是指在逆類(lèi)型轉(zhuǎn)換的時(shí)候,丟失數(shù)據(jù)的精度。
默認(rèn)初始化
- 如果定義變量沒(méi)有指定初始值,則變量會(huì)默認(rèn)初始化。初始化是由于變量的類(lèi)型(標(biāo)準(zhǔn)類(lèi)型/自定義類(lèi)型)和所處的位置所決定的。定義在任何函數(shù)體之外的變量會(huì)被初始化為0。
- 定義在函數(shù)體之內(nèi)的變量不會(huì)被初始化,其數(shù)值是未被定義的,如果試圖拷貝或者以其他方式來(lái)訪問(wèn)這個(gè)數(shù)值是會(huì)引發(fā)錯(cuò)誤。
- 類(lèi)的對(duì)象如果沒(méi)有顯示的初始化,則其數(shù)值由類(lèi)確定。
2.2.2 變量聲明和定義的關(guān)系
- C++使用分離式編譯機(jī)制,該機(jī)制允許將程序分割為若干個(gè)文件,每個(gè)文件都可以被獨(dú)立的編譯。簡(jiǎn)單的例子就是,頭文件的使用,使得程序代碼之間可以互相共享代碼。如引用頭文件iostream,調(diào)用輸入輸出函數(shù)std::out。
- 為了支持分離式編譯機(jī)制,C++將聲明和定義區(qū)分開(kāi)來(lái)。聲明使得程序的名字被程序所知,定義負(fù)責(zé)創(chuàng)建與名字相互關(guān)聯(lián)的實(shí)體。變量聲明規(guī)定了變量的類(lèi)型和名字,這一點(diǎn)上定義與之相同。除此之外,定義還申請(qǐng)存儲(chǔ)空間,也可能會(huì)給變量賦予一個(gè)初始化的數(shù)值。
- 如果想聲明變量但不定義它,在變量的名字之前使用extern關(guān)鍵字,而且不要顯示的初始化變量。
- 任何包含了顯示初始化的聲明就會(huì)變成了定義。當(dāng)然也可以使用extern標(biāo)記的變量賦一個(gè)初始化的數(shù)值,這就會(huì)抵消了extern的作用,一旦初始化就叫定義。
- 變量只可以被定義一個(gè),但是可以多次聲明。
2.2.3 標(biāo)識(shí)符
-
用戶(hù)自定義的標(biāo)識(shí)符不可以連續(xù)出現(xiàn)兩個(gè)下劃線,也不可以使用下劃線緊連大寫(xiě)字母開(kāi)頭,定義函數(shù)體外的標(biāo)識(shí)符也不可以以下劃線開(kāi)頭。
變量的命名規(guī)范
- 標(biāo)識(shí)符要體現(xiàn)實(shí)際的含義
- 變量名使用小寫(xiě)
- 用戶(hù)自定義的類(lèi)名一般使用大寫(xiě)
- 如果用戶(hù)定義的標(biāo)識(shí)符由多個(gè)單詞組成,則單詞之間要有明顯的區(qū)分。
名字的作用域
- 作用域是程序的一部分,一般使用花括號(hào)進(jìn)行分割。同一個(gè)名字在不同的作用域里面,可能指向不同的實(shí)體。名字的有效作用域始于名字的聲明語(yǔ)句,結(jié)束于聲明語(yǔ)句所在的作用域末端。
2.3 符合類(lèi)型
2.3.1 引用
- 引用為對(duì)象起了另外一個(gè)名字,引用類(lèi)型引用另外一種類(lèi)型。通過(guò)將聲明符號(hào)寫(xiě)成&d的形式來(lái)引用類(lèi)型,其中d是聲明的變量名字。初始變量的時(shí)候,初始數(shù)值會(huì)被拷貝到新建的對(duì)象中。定義引用的時(shí)候,程序把引用和初始值綁定在一起,而不是將初始值拷貝給引用。一旦初始化完成,引用將和他的初始值綁定在一起。因?yàn)闊o(wú)法使引用重新綁定到另外一個(gè)對(duì)象,因此引用必須要初始化。
- 引用并非對(duì)象,它只是為一個(gè)已經(jīng)存在的對(duì)象所起的另外一個(gè)名字。
- 引用不是一個(gè)對(duì)象,因此無(wú)法定義引用的引用。
- int &a = 10; //錯(cuò)誤,引用類(lèi)型的初始值必須是一個(gè)對(duì)象
- double dav = 3.15; int &rte = dav;錯(cuò)誤,引用類(lèi)型和被引用的對(duì)象的類(lèi)型必須是一致的。
2.3.2 指針
- 指針是指向的另外一種類(lèi)型的符合類(lèi)型。和引用是類(lèi)似的,指針也實(shí)現(xiàn)了對(duì)于其他對(duì)象的間接訪問(wèn)。
- 指針本身就是一個(gè)對(duì)象,允許對(duì)于指針賦值和拷貝,而且指針的生命周期內(nèi)可以先后指向相同類(lèi)型的不同對(duì)象;指針無(wú)需在定義的時(shí)候進(jìn)行賦值,和其他類(lèi)型是一樣的,在塊作用域內(nèi)定義的指針如果沒(méi)有被初始化,也將擁有一個(gè)不確定的數(shù)值。
- 引用不是對(duì)象,沒(méi)有實(shí)際的地址,因此不能定義指向引用的指針。
指針值
指針的值(即地址)應(yīng)屬于以下幾種狀態(tài)之一
- 指向一個(gè)對(duì)象
- 指向緊領(lǐng)對(duì)象所占空間的下一個(gè)位置
- 空指針,意味著指針沒(méi)有指向任何對(duì)象
- 無(wú)效指針,也就是上面所述情況之外的其他數(shù)值
利用指針指向?qū)ο?/span>
- 如果指針指向了一個(gè)對(duì)象,則可以允許使用解引用符*來(lái)訪問(wèn)該對(duì)象
- 解引用操作適用于那些確定了指向某個(gè)對(duì)象的有效指針
空指針
-
null pointer不指向任何對(duì)象,在試圖使用一個(gè)指針之前的代碼可以首先檢查指針是否為空。以下是檢查指針是否為空的方法
- 使用nullptr字面值來(lái)初始化指針,這是一種特殊類(lèi)型的字面值,可以被轉(zhuǎn)化為任意其他的指針類(lèi)型。另一種方法就如對(duì)p2的定義一樣,也可以將指針初始化為字面值0來(lái)生成指針。
void*指針
-
void*是一個(gè)特殊的指針類(lèi)型,用于存放人以對(duì)象的地址。一個(gè)void*指針可以存放一個(gè)地址,這個(gè)和其他地址是類(lèi)似的。
-
void*指針的功能單一,拿他和別的指針比較、作為函數(shù)的輸入和輸出、或者賦值給另外一個(gè)void*指針,但是不可以直接操作這個(gè)void*所指的對(duì)象。
2.3.3 理解復(fù)合類(lèi)型的聲明
定義多個(gè)變量
- int * p1,p2;//p1是指向int的指針,p2是單純的int
指向指針的指針
指向指針的引用
2.4? const限定符
- const對(duì)象一旦創(chuàng)建后其數(shù)值就不會(huì)被再次改變,因此const對(duì)象必須初始化。
- const對(duì)象只在文件中有效
- 在不同的文件中使用不同的const來(lái)定義不同的常量,那么每個(gè)文件定義的變量只會(huì)在自己所屬的文件中有效。如果想讓多個(gè)文件共享同一個(gè)const變量,那么使用關(guān)鍵字extern即可
2.4.1 const的引用
把引用綁定到const對(duì)象上,就像綁定到其他對(duì)象上一樣,稱(chēng)之為對(duì)于常量的引用。和普通信用不同,對(duì)于常量的引用不能被用于修改它所綁定的對(duì)象。
const int ci = 1024; const int &r1 = ci;//正確,引用及其對(duì)應(yīng)的對(duì)象都是常量 r1 = 42; //錯(cuò)誤,r1是對(duì)于常量的引用 int &r2 = ci; //錯(cuò)誤,試圖讓一個(gè)非常量去引用一個(gè)常量對(duì)象- 因?yàn)椴辉试S直接為ci賦值,當(dāng)然也不可以通過(guò)引用去改變ci,因此,對(duì)于r2的初始化是錯(cuò)誤的,假設(shè)初始化合法,就可以通過(guò)r2來(lái)改變他引用的對(duì)象的數(shù)值,這顯然是不正確的。
初始化和對(duì)const的引用
-
引用的類(lèi)型必須和其所引用對(duì)象的類(lèi)型是一致的,但是有兩個(gè)例外。1,初始化常量引用時(shí)候允許用任意表達(dá)式來(lái)作為初始化的數(shù)值,只要該表達(dá)式結(jié)果可以轉(zhuǎn)化為引用的類(lèi)型即可。尤其,允許一個(gè)常量引用綁定非常量的對(duì)象、字面值甚至是一個(gè)一般表達(dá)式。
對(duì)const引用可能引用一個(gè)并非const的對(duì)象
-
常量的引用僅僅對(duì)于可以引用可以參與的操作進(jìn)行了限定,對(duì)于引用的對(duì)象的本身是不是一個(gè)常量未做限定。因?yàn)閷?duì)象也可能是一個(gè)非常量,所以可以通過(guò)其他途徑來(lái)改變它的值。
?
?
總結(jié)
以上是生活随笔為你收集整理的C++中文版本primer 第二章变量和基本类型 学习笔记的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 广发尊享财智金审核要多久?这些因素影响审
- 下一篇: 广发尊享财智金被关闭了怎么办?做好这些有