Essential C++ 笔记 (二)

来源:互联网 发布:局域网远程关机软件 编辑:程序博客网 时间:2024/06/12 00:44

2.2 调用一个函数

1. 将参数声明为reference的理由之一是,希望得以直接对所传入的对象进行修改.

    将参数声明为reference的理由之二是,为了降低复制大型对象的负担.

    大多数编译器对于以传值方式返回class object, 都会通过最佳化程序, 加上额外的reference参数.

2. 但我们提领pointer时, 一定要先确定其值并非为0.

3. 内建型别的对象, 如果定义在file scope之内, 必定被初始化为0. 但如果它们被定义于local scope之内, 那么除非程序员指定其初值, 否则不会被初始化.

4. 不论local scope或file extent, 都是由系统自动管理. 第三种出处形式称为dynamic extent (动态范围). 这中heap memory内存必须由程序员自行管理.

从heap配置而来的对象, 被称为具有 dynamic extent, 因为它们是在执行期通过new表达式, 因此可以持续存活, 直到以delete表达式加以释放为止.

没有delete的heap内存放置的对象永远不会释放, 此称为memory leak(内存泄漏)


2.4 使用局部静态对象

1. 为了节省函数间的通信问题而将对象定义与file scope内, 永远都是一种冒险.

2. 局部静态对象所处的内存空间, 及时在不同的函数调用过程中, 依然持续存在.


2.5 声明一个inline函数

将函数声明为inline, 表示要求编译器在每个函数调用点上, 将函数的内容展开. 面对一个inline函数, 编译器可将该函数的调用操作改以一份函数副本取代.

我们必须将inline函数的定义至于头文件, 而不是把它放在各个不同的程序代码文件.

指定Inline函数仅仅是一种请求而没有强制性, 具体执行视编译器而定 


2.6 提供重载函数


2.8 函数指针


2.9 设定头文件

以<>将文件名括住, 编译器搜寻此文档时, 会先在默认的驱动器目录中寻找. 

以" " 括住, 此文件被认为是一个用户自行提供的头文件, 搜寻此文件时,会有含有此文件的驱动器寻找.