问题1:s 和 s2 的值分别是什么?
string s;
int main( ) {
string s2;
}
解析:
内置类型变量的初始化:
内置类型变量是否自动初始化取决于变量定义的位置。在函数体外定义的变量都初始化成 0 ,在函数体里定义的内置类型变量不进行自动初始化。
未初始化的变量事实上都有一个值。编译器把该变量放到内存中的某个位置,而把这个位置的无论哪种位模式都当成是变量初始的状态。
类类型变量的初始化:
每个类都定义了该类型的对象可以怎样初始化:构造函数 / 默认构造函数。
大多数类都提供了默认构造函数,例如, string 类定义了默认构造函数来初始化 string 变量为空字符串,即没有字符的字符串。
有些类类型没有默认构造函数。对于这些类型来说,每个定义都必须提供显示的初始化式。没有初始化值根本不可能定义这种类型的变量。
问题2:解释 string 类型的输入操作符和 gelline 函数分别如何处理空白字符。
解析:
string 类型的输入操作符:
读取并忽略开头所有的空白字符(如空格,换行符,制表符)
读取字符直至再次遇到空白字符,读取终止。
getline 读取整行文本:
getline 接受两个参数:一个输入流对象,一个 string 对象。从输入流的下一行读取,并保存读取的内容到 string 中,但不包括换行符。
和输入操作符不一样的是: getline 并不忽略行开头的换行符。只要遇到换行符,即便它是输入的第一个字符, getline也将停止并返回。如果第一个字符就是换行符,则 sring 参数将被置成空 string 。