3.9 问与答
问:while循环和for循环哪个更好?
答:两种循环本身无所谓哪种更好。应使用最符合需求的循环。
问:什么时候更应当使用for循环而不是while循环?
答:while循环能完成for循环可以完成的所有任务。然而,有些情况下特别需要使用for循环,例如计数和遍历序列。
问:可以在for循环中使用break和continue语句吗?
答:当然可以,而且它们的作用和在while循环中一样:break用于终止循环,continue用于将控制跳转到循环的顶部。
问:为什么程序员倾向于使用i、j和k这样的变量名作为for循环的计数器?
答:您可能不相信,程序员使用i、j和k主要是出于传统的原因。该传统始于FORTRAN语言的早期版本,当时的整型变量必须以特定字母开头,包括i、j和k。
问:不需要包含头文件就可以使用int或char类型,那么使用字符串时为什么要包含string文件?
答:int和char是内置类型,它们在C++程序中总是可用的。另一方面,string类型不是内置类型,它作为标准库的一部分定义在文件string中。
问:C风格字符串这个名字源自哪里?
答:C语言中,程序员使用以空字符结尾的字符数组来表示字符串。这种做法延续到了C++中。在C++引入新的string类型后,程序员需要将这两者区分开来。因此,就将早期的表示方法称为C风格字符串。
问:为什么应当使用string对象而不是C风格字符串?
答:string对象对比C风格字符串有其优势。最明显的一点在于,它的大小可动态调整。使用string时不用指定长度限制。
问:难道就不应当使用C风格字符串吗?
答:只要可能就尽量使用string对象。如果您正从事的项目中使用的是C风格字符串,那么可能就必须使用它了。
问:什么是运算符重载?
答:运算符重载允许在不同的上下文中对常见运算符的用法进行重定义。重定义的结果虽然不同,但却是可预见的。例如,用于将两数相加的+运算符被string类型重载,以实现字符串的连接。
问:运算符重载不会造成混淆吗?
答:运算符重载确实给运算符定义了新的含义,但是这个新的含义只在特殊的上下文中才有效。例如,表达式4 + 6中的+运算符很明显将两数相加,而在表达式myString1+ myString2中的+运算符则用于连接字符串。
问:可以使用+=运算符连接字符串吗?
答:可以。+=运算符已经过重载,可以用于字符串。
问:应当使用length()成员函数还是size()成员函数来获取string对象中字符的数目?
答:length()和size()返回的值相同,都可以使用。
问:什么是判定函数?
答:判定函数是指返回true或false的函数。string对象的成员函数empty()就是一个判定函数。
问:如果试图给数组边界外的元素赋值会怎样?
答:C++允许这样的赋值。然而,结果会不可预测,而且可能导致程序崩溃。因为这样更改了计算机内存中某些未知部分。
问:为什么应当使用多维数组?
答:这是为了让一组元素使用起来显得更加直观。例如,可以用一维数组表示棋盘,如chessBoard[64];也可以用更加直观的二维数组表示,如chessBoard[8][8]。