《C++PRIMER》笔记20090407

1. endl是一个manipulator ,包括在输出流中插入换行符和刷新输出缓冲区两个操作。setw()操纵符限制读取的字符个数为其参数减1,可以用于保证数据不溢出(需要#include<iomanip>)。
2. 几个英文翻译:address-of  operator (取地址操作符 &); dereference operator(解引用操作符 *) addressable可寻址的
    uninitialized  未初始化的(表示其值是undefined的随机数)
3. delete的两种形式:delete ptr; delete[] ptr;
4. 通过声明inline来避免函数调用导致的开销,特别是成员函数如getSize()等。在类内部定义的成员函数缺省情况下都是inline的,而在类外定义的成员函数必须显式地声明为inline(并应包含在该类头文件中)。 另外,virtual不能inline(inline发生在编译期)。类的构造函数没有返回值,可以被声明为inline。
5. explicit关键字的作用是禁用对构造函数参数的隐式转换,使得传递类型不符合的参数将无法通过编译。
6. 类的静态数据成员将只有一个拷贝,这可以作为实例对象之间共享数据的一种方式。
7. assert宏和TRACE宏只在DEBUG模式下有效。(strcpy函数的实现中的错误检测,《高质量C++编程》)考虑用SEH。)
8. 除以0的运算会导致未定义结果,但不会抛出标准异常。
9. vector.end() 返回的是指向“最末元素的下一个”的iterator。一对iterator合起来可以用来标记出待遍历的元素的范围。
 int a[3]={7,8,9};
 vector<int> v1(a,a+3); //构造函数原型vector(_Iter_First , _Iter_Last) 。 _Iter_Last应指向“最末元素的下一个”位置
 assert(v1[0]==7);
 assert(v1[1]==8);
 assert(v1[2]==9);  //v1[]={7,8,9}
10. __cplusplus宏前面是两个连起来的下划线; 宏_FILE_和 _LINE_可以用于错误消息输出时内容中的定位。
11. 使用范型算法(sort()、reverse()、equal()、min()、max()等等)需要#include <algorithm>
12. 数组索引的支持(如hashtable)是通过map关联数组实现的。需要#include <map>
13.  int型符号常量前面加0表示八进制数,前面加0x或者0X表示十六进制数:
       24; 024 ; 0x24;
      int型默认是signed;后面加u或者U表示无符号数,加l或L表示long型:
       128u 1024UL 1L 8Lu
     科学计数法用e或E表示。浮点型1.0默认是double;f或F后缀表示单精度;l或L后缀表示扩展精度
     char型字符前面加L表示wchar_t  如:L'a'
      L"this is a wide string literal"是一个宽字符串,其结尾是一个L'\0'。(宽空字符)
    '\0'’空(null)字符在C++和C中用于标记字符串结束。这种C风格的字符串通常带sz前缀
关于NULL与EOF:
 VS2005的定义  // stdio.h
/* Define NULL pointer value */
#ifndef NULL
#ifdef __cplusplus
#define NULL    0
#else
#define NULL    ((void *)0)
#endif
#endif
 
#define EOF     (-1)  //注意括号的用处

14. 函数指针指向程序的代码段,这点与数据指针不同。
15. C风格的字符串的遍历:结尾是'\0' (见总结文章)
16. string类转化成C风格的字符串的方法:string.c_str() 注意其返回值是const char*
17. bool的 true 和 false 可以被隐式转换为int的1和0,反之0或者空指针((void *)0)也可以隐式转换成false,所有其他值被转换成true
18. enum型变量成员的实际枚举名不能直接打印出来(打出来的是值)。我们可以通过将其作为预定的名字字符串数组下标来输出。
19. enum中枚举成员的值不必是惟一的,可以通过赋值来使得不同名字的枚举成员具有相同的值
20. 作为参数传递的时候不能用数值类型代替enum类型;但是在运算表达式中enum可以被自动转换为数值类型
21. STL中对vector的习惯用法是先定义一个空vector然后再插入元素。注意对于空vector ivec来说ivec[0]还不可引用。
22. STL的复数类型complex<>   需要#include<complex>
     pair类型pair<>  需要#include<utility>    该类型是两个相同或不同类型对象的组合。缺点是只能有两个元素
23. 拷贝构造函数等涉及到对象之间的拷贝复制的操作中常犯的错误时忘记要先测试是否是同一个对象。
24. C/C++标准未定义二元操作符的左右操作数的计算顺序,所以应该保证计算过程中左右操作数的值应该与运算左右顺序无关。
25. 对栈顶的操作反映了prefix形式和postfix形式的不同:
 stack[ top++ ] = value //push
 int value = stack[ --top ] //pop

DONE:pp.138
TODO:
CH6 STL容器类型
CH12 范型算法
CH20 关于输入流的终止、EOF

 

posted on 2009-04-07 08:48  TobyLin的学习之路  阅读(216)  评论(0编辑  收藏  举报

导航