首页 > 代码库 > c++ primer (5)2

c++ primer (5)2

第三章

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++独有的。