第三章
1.头文件不应包含using声明,因为头文件的内容会拷贝到所有引用它的文件中去。
2.初始化string对象的方式:
string s1; //默认初始化,s1是一个空串 string s2(s1); //s2是s1的一个副本 string s2=s1; //等价于s2(s1) string s3("value"); //s3是字面值"value"的副本,除了字面值最后那个空字符外 string s3="value"; //等价于s3("value") string s4(n,‘c‘); //把s4初始化为由连续n个字符c组成的串
用等号初始化一个变量,执行的是拷贝初始化,不使用等号,是直接初始化。
对于多个初始值一般用直接初始化,如s4,如要用拷贝初始化,需要显示创建一个临时对象用于拷贝:
string s8=string(10,‘c‘);
这条语句等价于:
string temp(10,‘c‘); string s8=temp;
3.读取一行使用getline(),getline()参数是一个输入流和一个string对象,会读入换行符,把所读内容存入string对象时不存换行符。getline()也会返回它的流参数,因此可以作为判断条件。
4.string类及其他大多数标准库类型都定义了几种配套的类型,这些配套类型体现了标准库与机器无关的特性。string::size_type就是其中一种,是size函数返回值的类型。string::size_type是无符号类型的值并且能足够放下任何string对象的大小。
5.如果一条表达式中已经有了size()函数就不要再使用int了,这样可以避免int和unsigned可能带来的问题。
auto len=line.size(); //len的类型是string::size_type if(line.size()<n) //如果n为负值,结果几乎为真,n会转化为一个比较大的无符号值
6.字面值和string对象相加:
string s1="hello",s2="world"; string s3=s1+","+"world"; //正确,右边的值可以转换成string string s4="hello"+","+s2; //错误,试图把两个字符串字面值加在一起
7.建议使用c++版本的c标准库头文件,即将name.h改为cname,标准库中的名字总能在std中找到,使用.h,就必须记住哪些是c语言继承,哪些是c++独有的。