3.9 問與答
問:while循環(huán)和for循環(huán)哪個(gè)更好?
答:兩種循環(huán)本身無所謂哪種更好。應(yīng)使用最符合需求的循環(huán)。
問:什么時(shí)候更應(yīng)當(dāng)使用for循環(huán)而不是while循環(huán)?
答:while循環(huán)能完成for循環(huán)可以完成的所有任務(wù)。然而,有些情況下特別需要使用for循環(huán),例如計(jì)數(shù)和遍歷序列。
問:可以在for循環(huán)中使用break和continue語句嗎?
答:當(dāng)然可以,而且它們的作用和在while循環(huán)中一樣:break用于終止循環(huán),continue用于將控制跳轉(zhuǎn)到循環(huán)的頂部。
問:為什么程序員傾向于使用i、j和k這樣的變量名作為for循環(huán)的計(jì)數(shù)器?
答:您可能不相信,程序員使用i、j和k主要是出于傳統(tǒng)的原因。該傳統(tǒng)始于FORTRAN語言的早期版本,當(dāng)時(shí)的整型變量必須以特定字母開頭,包括i、j和k。
問:不需要包含頭文件就可以使用int或char類型,那么使用字符串時(shí)為什么要包含string文件?
答:int和char是內(nèi)置類型,它們?cè)贑++程序中總是可用的。另一方面,string類型不是內(nèi)置類型,它作為標(biāo)準(zhǔn)庫(kù)的一部分定義在文件string中。
問:C風(fēng)格字符串這個(gè)名字源自哪里?
答:C語言中,程序員使用以空字符結(jié)尾的字符數(shù)組來表示字符串。這種做法延續(xù)到了C++中。在C++引入新的string類型后,程序員需要將這兩者區(qū)分開來。因此,就將早期的表示方法稱為C風(fēng)格字符串。
問:為什么應(yīng)當(dāng)使用string對(duì)象而不是C風(fēng)格字符串?
答:string對(duì)象對(duì)比C風(fēng)格字符串有其優(yōu)勢(shì)。最明顯的一點(diǎn)在于,它的大小可動(dòng)態(tài)調(diào)整。使用string時(shí)不用指定長(zhǎng)度限制。
問:難道就不應(yīng)當(dāng)使用C風(fēng)格字符串嗎?
答:只要可能就盡量使用string對(duì)象。如果您正從事的項(xiàng)目中使用的是C風(fēng)格字符串,那么可能就必須使用它了。
問:什么是運(yùn)算符重載?
答:運(yùn)算符重載允許在不同的上下文中對(duì)常見運(yùn)算符的用法進(jìn)行重定義。重定義的結(jié)果雖然不同,但卻是可預(yù)見的。例如,用于將兩數(shù)相加的+運(yùn)算符被string類型重載,以實(shí)現(xiàn)字符串的連接。
問:運(yùn)算符重載不會(huì)造成混淆嗎?
答:運(yùn)算符重載確實(shí)給運(yùn)算符定義了新的含義,但是這個(gè)新的含義只在特殊的上下文中才有效。例如,表達(dá)式4 + 6中的+運(yùn)算符很明顯將兩數(shù)相加,而在表達(dá)式myString1+ myString2中的+運(yùn)算符則用于連接字符串。
問:可以使用+=運(yùn)算符連接字符串嗎?
答:可以。+=運(yùn)算符已經(jīng)過重載,可以用于字符串。
問:應(yīng)當(dāng)使用length()成員函數(shù)還是size()成員函數(shù)來獲取string對(duì)象中字符的數(shù)目?
答:length()和size()返回的值相同,都可以使用。
問:什么是判定函數(shù)?
答:判定函數(shù)是指返回true或false的函數(shù)。string對(duì)象的成員函數(shù)empty()就是一個(gè)判定函數(shù)。
問:如果試圖給數(shù)組邊界外的元素賦值會(huì)怎樣?
答:C++允許這樣的賦值。然而,結(jié)果會(huì)不可預(yù)測(cè),而且可能導(dǎo)致程序崩潰。因?yàn)檫@樣更改了計(jì)算機(jī)內(nèi)存中某些未知部分。
問:為什么應(yīng)當(dāng)使用多維數(shù)組?
答:這是為了讓一組元素使用起來顯得更加直觀。例如,可以用一維數(shù)組表示棋盤,如chessBoard[64];也可以用更加直觀的二維數(shù)組表示,如chessBoard[8][8]。