《C++ Primer Plus》读书笔记
2015-09-04 08:37
323 查看
1.sizeof运算符返回类型或数据对象的长度(单位为字节)。注意,如果将sizeof运算符用于数组名,得到的将是整个数组中的字节数。但如果将sizeof用于数组元素,得到的将是元素的长度(单位为字节)。
2.字符数组如果以’\0’结尾,则该字符数组为字符串。对于cout输出字符数组,会找到内存一直到’\0’字符之后停止输出。
3.初始化字符数组如果没有完全赋值,则之后位置的值默认为0。故如果初始化全为0的数组可。int arr[5] = { };
4.cin.get(X,X)第一次调用后,换行符留在输入队列中,因此第二次调用时看到的第一个字符便是换行符。因此get()认为到达行尾,而没有发现任何可读取的长度。如果不借助于帮助,get()将不能跨过该换行符。
可用cin.get(X,X).get();完成。
5.在C++中创建指针时,计算机将分配用来存储地址的内存,但不会分配用来存储指针所指向的数据的内存。例:long * fellow; *fellow = 233323;上述代码没有将地址赋给fellow。由于fellow没有被初始化,它可能有任何值。不管是什么,程序都将解释为233323的地址。
6.一定要在对指针应用解除引用运算符(*)之前,将指针初始化为一个确定的适当的地址。
7.new分配的内存快通常与常规变量声明分配的内存快不同。常规变量都存储在栈内存,而new从堆中分配内存。
8.在cout和多数C++表达式中,char数组名,char指针以及用引号括起来的字符串常量常被解释为字符串第一个字符的地址。
9.C++有3种管理数据内存的方式:自动存储,静态存储和动态存储。(1)在函数内部定义的常规变量使用使用自动存储空间,被称作自动变量。自动变量实际上是局部变量。自动变量通常存储在栈中。这以为着执行代码快时,其中的变量依次加入到栈,而在离开代码块时,将按相反的顺序释放这些变量。(2)静态存储是整个期间都存在的存储方式。使变量成为静态的方式有两种,一种是在函数外面定义它,另一种是在声明变量时使用关键字static。自动存储和静态存储的关键在于:这些方法严格地限制了变量的寿命。变量可能存在于程序的整个生命周期,也可能只是在特定函数被执行时存在。(3)new和delete运算符提供一种比自动变量和静态变量更灵活的方法。它们管理一个内存池,这在C++中成为自由存储空间或堆。使用new和delete使程序员对程序如何使用内存有着更强大的控制权。在栈中,自动添加和删除机制使得占用的内存总是连续的。但new和delete的互相影响可能导致占用的自由存储区不连续,使跟踪新分配内存的位置更困难。
10.vector类也使用new和delete完成内存管理。但是自动完成的。付出的代价是效率稍低。分配的是堆内存。
11.与数组一样,array对象长度也是固定的,也使用栈内存。效率和数组相同。可以将一个array对象赋值给另一个array对象,而对于数组,不许逐元素复制数据。
12.内联函数是C++为提高程序运行速度所做的一项改进。
13.内联函数:编译器将使用相应的函数代码来替代函数调用。程序无需跳到另一个位置执行代码。因此内联函数的运行速度比常规函数快。代价是付出更多内存。如果代码执行时间短,则内联调用就可以节省大部分时间,
14.将引用参数声明为常量数据的引用的理由有三个:使用const可以避免无意间修改数据的变成错误。使用const使函数能够处理const和非const实参,否则只能接受非const数据。使用const引用使函数能够正确生成并使用临时变量。
15.函数直接返回对象,是先复制到临时变量中,然后在复制给最终变量。而返回引用的效率更高
16.将类对象传递给函数时,C++通常做法是使用引用。
18.使用引用参数的原因:能够修改调用函数中的数据对象。通过传递引用而不是整个数据对象,可以提高程序的运行速度。
19.对于使用传递的值而不作修改的函数:如果数据对象很小,如内置的数据类型或者小型结构,则按值传递。如果数据对象是数组则使用指针,并将指针声明为指向const的指针。如果数据对象是比较大的结构,则使用const指针或者const引用。如果数据对象是类对象则使用const引用。
20对于修改调动函数中数据的函数:如果数据对象是内置数据类型,则使用指针。如果数据对象是数组。只能用指针。如果数据对象是结构,则使用引用或者指针。如果数据对象是类对象,则使用引用。
21.类方法定义位于类声明中的函数都将自动成为内联函数。类声明通常将短小的成员函数作为内联函数。
22.直接声明类对象自动调用默认构造函数、当且仅当没有定义任何构造函数时,编译器才会提供默认的构造函数。
23.声明类对象创建:这种方法创建的对象,内存分配是分配到栈中的,由C++缺省创建和撤销,自动调用构造函数和析构函数。new方法创建:它们都是在堆上分配内存来创建对象的。
24.typedef在全局定义一个类型别名。(The typedef declaration provides a way to create an alias that can be used anywhere in place of a (possibly complex) type name.)
2.字符数组如果以’\0’结尾,则该字符数组为字符串。对于cout输出字符数组,会找到内存一直到’\0’字符之后停止输出。
3.初始化字符数组如果没有完全赋值,则之后位置的值默认为0。故如果初始化全为0的数组可。int arr[5] = { };
4.cin.get(X,X)第一次调用后,换行符留在输入队列中,因此第二次调用时看到的第一个字符便是换行符。因此get()认为到达行尾,而没有发现任何可读取的长度。如果不借助于帮助,get()将不能跨过该换行符。
可用cin.get(X,X).get();完成。
5.在C++中创建指针时,计算机将分配用来存储地址的内存,但不会分配用来存储指针所指向的数据的内存。例:long * fellow; *fellow = 233323;上述代码没有将地址赋给fellow。由于fellow没有被初始化,它可能有任何值。不管是什么,程序都将解释为233323的地址。
6.一定要在对指针应用解除引用运算符(*)之前,将指针初始化为一个确定的适当的地址。
7.new分配的内存快通常与常规变量声明分配的内存快不同。常规变量都存储在栈内存,而new从堆中分配内存。
8.在cout和多数C++表达式中,char数组名,char指针以及用引号括起来的字符串常量常被解释为字符串第一个字符的地址。
9.C++有3种管理数据内存的方式:自动存储,静态存储和动态存储。(1)在函数内部定义的常规变量使用使用自动存储空间,被称作自动变量。自动变量实际上是局部变量。自动变量通常存储在栈中。这以为着执行代码快时,其中的变量依次加入到栈,而在离开代码块时,将按相反的顺序释放这些变量。(2)静态存储是整个期间都存在的存储方式。使变量成为静态的方式有两种,一种是在函数外面定义它,另一种是在声明变量时使用关键字static。自动存储和静态存储的关键在于:这些方法严格地限制了变量的寿命。变量可能存在于程序的整个生命周期,也可能只是在特定函数被执行时存在。(3)new和delete运算符提供一种比自动变量和静态变量更灵活的方法。它们管理一个内存池,这在C++中成为自由存储空间或堆。使用new和delete使程序员对程序如何使用内存有着更强大的控制权。在栈中,自动添加和删除机制使得占用的内存总是连续的。但new和delete的互相影响可能导致占用的自由存储区不连续,使跟踪新分配内存的位置更困难。
10.vector类也使用new和delete完成内存管理。但是自动完成的。付出的代价是效率稍低。分配的是堆内存。
11.与数组一样,array对象长度也是固定的,也使用栈内存。效率和数组相同。可以将一个array对象赋值给另一个array对象,而对于数组,不许逐元素复制数据。
12.内联函数是C++为提高程序运行速度所做的一项改进。
13.内联函数:编译器将使用相应的函数代码来替代函数调用。程序无需跳到另一个位置执行代码。因此内联函数的运行速度比常规函数快。代价是付出更多内存。如果代码执行时间短,则内联调用就可以节省大部分时间,
14.将引用参数声明为常量数据的引用的理由有三个:使用const可以避免无意间修改数据的变成错误。使用const使函数能够处理const和非const实参,否则只能接受非const数据。使用const引用使函数能够正确生成并使用临时变量。
15.函数直接返回对象,是先复制到临时变量中,然后在复制给最终变量。而返回引用的效率更高
16.将类对象传递给函数时,C++通常做法是使用引用。
18.使用引用参数的原因:能够修改调用函数中的数据对象。通过传递引用而不是整个数据对象,可以提高程序的运行速度。
19.对于使用传递的值而不作修改的函数:如果数据对象很小,如内置的数据类型或者小型结构,则按值传递。如果数据对象是数组则使用指针,并将指针声明为指向const的指针。如果数据对象是比较大的结构,则使用const指针或者const引用。如果数据对象是类对象则使用const引用。
20对于修改调动函数中数据的函数:如果数据对象是内置数据类型,则使用指针。如果数据对象是数组。只能用指针。如果数据对象是结构,则使用引用或者指针。如果数据对象是类对象,则使用引用。
21.类方法定义位于类声明中的函数都将自动成为内联函数。类声明通常将短小的成员函数作为内联函数。
22.直接声明类对象自动调用默认构造函数、当且仅当没有定义任何构造函数时,编译器才会提供默认的构造函数。
23.声明类对象创建:这种方法创建的对象,内存分配是分配到栈中的,由C++缺省创建和撤销,自动调用构造函数和析构函数。new方法创建:它们都是在堆上分配内存来创建对象的。
24.typedef在全局定义一个类型别名。(The typedef declaration provides a way to create an alias that can be used anywhere in place of a (possibly complex) type name.)
相关文章推荐
- [C++] 智能指针与循环引用
- C++之随笔(二)
- 第2周项目1-C/C++函数参数传递的三种方式
- C++重载逗号,括号,类型转换,实现以奇怪的方式给变量赋值
- c语言指针基本使用
- C/C++ Resources
- C/C++ Resources
- c/c++ 直接使用动态库 dlopen
- c/c++ 直接使用动态库 dlopen
- c++ __declspec关键字详细用法
- c++ __declspec关键字详细用法
- c++ try throw catch
- c++ try throw catch
- c++ virturn function -- 虚函数
- c++ virturn function -- 虚函数
- c++ anonymous union,struct -- 匿名联合体和机构体
- c++ anonymous union,struct -- 匿名联合体和机构体
- c++ anonymous namespace -- 匿名空间
- c++ inheritance -- 继承
- c++ anonymous namespace -- 匿名空间