C++ Primer学习之(3)——标准库类型

来源:互联网 发布:淘宝商品id在哪里看 编辑:程序博客网 时间:2024/06/15 21:34

P110:
scope(作用域),C++有以下几种作用域:

全局:名字定义在任何其他作用域外。
类:名字由类定义。
命名空间:名字在命名空间中。
局部:名字在函数内定义。
块:名字定义在语句块中,也就是说定义在一对花括号里。
语句:名字在语句(如if, while和for语句)的条件内定义。
注:作用域是一个很常见的问题,之前的概念一直很模糊,如果面试出这个题我肯定是答不全的,记。

P114:
在一种情况下,必须总是使用完全限定的标准库名字:在头文件中。理由是头文件的内容会被预处理器复制到程序中。如果在头文件中放置using声明,就相当于在包含该头文件using的每个程序中都放置了同一using,不论该程序是否需要using声明。
注:这个错误我一直没有意识到,在头文件中using namespace不是一次两次的事了。

P120:
size_type:库类型,与机器无关(machine-independent)。任何存储string的size操作结果的变量必须为string::size_type类型,特别重要的,不要把size的返回值赋给一个int变量。为了避免溢出,保存一个string对象size的最安全的方法就是使用标准库类型string::size_type。

P122:
string st1, st2 = "The expense of spirit";st1 = st2;
大多数string库类型的赋值等操作的实现都会遇到一些效率上的问题。它必须先把st1占用的相关内存释放掉,然后再分配给st2足够存放st2副本的内存空间,最后把st2中的所有字符赋值刀新分配的内存空间。
注:string内部的操作对我而言就像是一个黑盒子一样。

P126:
cctype头文件中的函数:
tolower(c):如果c大写字符,返回其小写字母形式,否则直接返回c。
toupper(c):如果c是小写字母,则返回其大写字母形式,否则直接返回c。
可以用tolower函数把string对象s中的字母改为小写字母,如下:
for(string::size_type index = 0; index != s.size(); ++index){    s[index] = tolower(s[index]);}
注:今天就碰到将string对象里所有字符转换为大写的问题,原来这里早就有答案了。

P127:
建议:采用C标准库头文件的C++版本
C++标准库除了定义了一些选定于C++的设施外,还包括C标准库。
C标准库头文件命名形式为name.h而C++版本则命名为cname,少了.h后缀,而在头文件名前加了c表示这个头文件源自C标准库。因此cctype和ctype.h文件的内容是一样的。
特别地,cname头文件中定义的名字都定义在命名空间std内,而.h版本中的名字却不是这样。
通常,C++程序中应采用cname这种头文件的版本,而不采用name.h版本,这样,标准库中的名字在命名空间std中保持一致。
注:之前一直是乱用的,也没有弄明白.h和不带.h后缀的头文件区别,读完这段稍稍明白。
0 0
原创粉丝点击