《C++ Primer Plus》(第六版)笔记
来源:互联网 发布:vs2010c 数据库教程 编辑:程序博客网 时间:2024/06/07 05:06
《C++ Primer Plus》(第六版)笔记
1 什么时候应调用析构函数呢?
这由编译器决定,通常不应在代码中显式的调用析构函数(有例外)。
如果创建的是静态储存类对象,则其析构函数将在程序结束时自动被调用。如果创建的是自动存储类对象,则其析构函数将在程序执行完代码块时(该对象在其中定义的)自动被调用。如果对象是通过new创建的,则它将驻留在栈内存或自由存储区中,当使用delete来释放内存时,其析构函数将自动被调用。最后程序可以创建临时对象来完成特定的操作,在这种情况下,程序将在结束对该对象的使用时自动调用其析构函数。
2 三种链接性
外部链接性(可在其他文件中访问)
内部链接性(只能在当前文件中访问)
无链接性(只能在当前函数或代码块中访问)
创建链接性为外部的静态持续变量,必须在代码块的外面声明它;
创建链接性为内部的静态持续变量,必须在代码块的外面声明它,并使用static限定符;
要创建没有链接性的静态持续变量,必须在代码块内声明它,并使用static限定符。
3 单定义规则
一方面,在每个使用外部变量的文件中,都必须声明它;另一方面,C++有“单定义规则”(One Definition Rule,ODR),该规则指出,变量只能有一次定义。为满足这种需求,C++提供了两种变量声明。一种是定义声明(defining declaration)或简称定义(definition),它给变量分配存储空间;另一种是引用声明(referencing declaration)或简称声明(declaration),它不给变量分配存储空间,因为它引用已有变量。
引用声明使用关键字extern,且不进行初始化,否则,声明为定义,导致分配存储空间:
double up; //definition ,up is 0 extern int blem;// blem defined elsewhere extern char gr='Z';//definition because initializ
单定义规则并不意味着不能有多个变量的名称相同。然而虽然程序中可包含多个同名的变量,但每个变量都只有一个定义。
//file01.cpp extern int cats=20;//definition because of initialzation int dogs=22;//also a definition int fleas;//also a definition
//file02.cpp//use cats and dogs from file01.cpp extern int cats;//not definitions because of they use extern int dogs;//extern and have no initialization
//file03.cpp//use cats,dogs,and fleas from file01.cpp extern int cats; extern int dogs; extern int fleas;
上面file02中没有重新声明变量fleas,因此无法访问它,在file01中,关键字extern并非必不可少,因为即使省略它,效果也相同。
再谈const
在C++(但不是C语言中),const限定符,对默认存储类型稍有影响。在默认情况下全局变量的链接性为外部的,但const全局变量的链接性为内部的.
因为这让程序员更加轻松。例如一组常量放在头文件中,并在同一个程序 的多个文件中使用该头文件。那么预处理器将头文件的内容包含到源文件后,所有源文件都将包含类似下面这样的定义:
const int finger=10;const char* warning="walk!";
如果全局const的链接性是外部,则根据单定义规则,这将出错。也就是说,只能有一个文件可以包含前面的声明,而其他文件必须使用extern关键字来提供引用声明。另外,只有未使用extern关键字的声明才能进行初始化:
//extern would be required if const had external linkageextern const int fingers;//can not be initializedextern const char* warning;
因此,需要为某个文件使用一组定义,而其他文件使用另一组声明。然而,如果链接性为内部的,则可以在所有文件中使用相同的声明。
如果处于某种原因,希望某个常量链接性为外部的,则可以使用extern关键字如:
extern const int states=50;//definition with external linkage
在种情况下,必须在所有使用该常量的文件中使用extern关键字来声明它。然而,鉴于单个const在多个文件之间共享,因此只有一个文件可对其进行初始化。
在函数或代码块中声明const时,其作用域为代码块,即仅当程序执行该代码块中的代码时,该常量才是可用的。
- 【C Primer Plus 第六版】笔记
- c++primer plus 第六版 练习答案
- c++Primer Plus第六版练习题答案
- 《C++ Primer Plus》(第六版)笔记
- 《C++ Primer Plus》(第六版)笔记二
- C Primer Plus 第六章
- 整理下C++primer plus 第六版第六章习题。
- C++Primer Plus(第六版) 第六章 第二题
- C++Primer Plus(第六版) 第七章 第六题
- C.Primer.Plus(第六版)第六章编程练习
- C ++ Primer Plus 第六版 第六章编程练习答案
- 【C++】学习笔记十四——C++ primer plus第六版第4章编程练习
- C Primer Plus - 笔记
- c primer plus笔记
- c primer plus 笔记
- 《C Primer Plus》笔记
- C++PRIMER PLUS第六版课后编程答案 4.1-4.5
- C++PRIMER PLUS第六版课后编程答案 4.6-4.10
- Activity启动模式和FLAG、TASKAFFINITY
- P3810 【模版】三维偏序
- SpringBoot Docker部署
- 数据库四种隔离级别
- 指针的强制转换
- 《C++ Primer Plus》(第六版)笔记
- BZOJ 4033: [HAOI2015]树上染色
- c# ArrayList去重
- 设计模式复习、实践和总结(二)
- 2017.07.10【NOIP提高组】模拟赛B组
- 全文检索Lucene(一)---快速入门
- linux 在虚拟机下典型安装 (分配内存)安装 二
- sql中的左连接和右连接的区别
- 从C++封装、继承、多态谈UML建模