习题3.2 什么是默认构造函数?
解答:
默认构造函数就是在没有显示提供初始化式时调用的构造函数。它由不带参数的构造函数,或者为所有形参提供默认实参的构造函数定义。如果定义某个类的变量时没有提供初始化式,就会使用默认构造函数。
如果用户定义的类中没有显示定义任何构造函数,编译器就会自动为该类生成默认构造函数,称为合成的默认构造函数。
习题3.3 列举出三种初始化string对象的方法。
解答:
习题3.5 解释string类型的输入操作符和getline函数分别如何处理空白字符。
解答:
string类型的输入操作符对空白字符的处理:读取并忽略有效字符(非空白字符)之前所有的空白字符,然后读取字符直至再次遇到空白字符,读取终止(该空白字符仍留在输入流中)。
getline函数对空白字符的处理:不忽略行开头的空白字符,读取字符直至遇到换行符,读取终止并丢弃换行符(换行符从输入流中去掉但并不存储在string对象中)。
习题3.21 何时使用const迭代器?何时使用const_iterator?解释两者的区别?
P103 对指针进行初始化或赋值只能使用以下四种类型的值:
p140 为什么使用前自增操作?
有使用C语言背景的读者可能会觉得奇怪,为什么要在程序中使用前自增操作。道理很简单:因为前置操作需要做的工作更少,只需加1返回加1后的结果即可。而后置操作符则必须先保存操作数原来的值,以便返回未加1之前的值作为操作的结果。对于int型对象和指针,编译器可优化掉这项额外工作。但是对于更多的复杂迭代器类型,这种额外工作可能会花费更大的代价。因此,养成使用前置操作这个好习惯,就不必担心性能差异的问题。
前自增操作和后自增操作都使其操作数加1,二者的区别在于:
P154 如果赋值操作的左右操作数类型不同,则右操作数会被转换为左边的类型。