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