IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> [C++ Primer Plus]第九章内存模板和命名空间 -> 正文阅读

[C++知识库][C++ Primer Plus]第九章内存模板和命名空间

单独编译

不要将函数定义或变量声明放在头文件中。例如如果在头文件包含一个函数定义,然后在其他两个文件中包含该头文件,则同一个程序将包含同一个函数的两个定义,除非函数是内联的,否则这将出错。

头文件中常包含的内容为:

1、函数原型;2、使用#define或const定义的符号常量;3、结构声明;4、类声明;5、模板声明;6、内联函数。

结构声明不创建变量,只是在源码文件中声明结构变量时,告诉编译器如何创建该结构变量.

模板声明不是将被编译的代码,他们指示编译器如何生成与源代码中的函数调用相匹配的函数定义

被声明为const的数据内联函数有特殊的链接属性,因此可将其放在头文件中,而不会引起问题

#include文件包含:

如果文件名包含在尖括号中,则C++编译器将在存储标准头文件的主机系统的文件系统在查找;

如果文件名包含在双引号中,则编译器将首先查找当前的工作目录或源代码目录,如果没有在那里找到头文件,则将在标准位置查找。

Unix系统中编译由多个文件组成的C++程序:

1、执行编译两个源代码文件的UNIX命令

2、预处理器将包含的文件和源代码文件合并

3、编译器创建每个源代码文件的目标代码文件

4、链接程序将目标代码文件、库文件和启动代码合并,生成可执行文件。

存储持续性、作用域和链接性

C++有四种管理数据内存的方式:自动存储、静态存储、动态存储和线程存储(先不介绍)

1、自动存储:函数内部定义的常规变量使用自动存储空间,这种变量被称为自动变量,在函数结束时消亡,其作用域为包含它的代码块。自动变量存储在栈中,在执行代码块时,其中的变量讲一次加入到栈中,而在离开代码块时,将按相反的顺序释放这些变量。在程序执行的过程中,栈将不断地增大和缩小。

2、静态存储:静态存储是整个程序执行期间都存在的存储方式。使变量成为静态的方式有两种:一种是在函数外面定义它;另一种是声明变量时使用关键字static。

3、动态存储:new、delete、malloc、free提供了比自动变量和静态变量更灵活的方法,管理了一个内存池(在C++中被称为堆或自由存储空间)。

4、线程存储持续性:如果变量是使用关键字thread_local声明的,则其生命周期与所属的线程一样长。

程序使用两个指针来跟踪栈,一个指针指向栈底——栈开始的位置,另一个指针指向栈顶——下一个可用内存单元。但函数被调用时,其自动变量将被加入到栈中,栈顶指针指向变量后面的下一个可用的内存单元。函数结束时,栈顶指针被重置为函数被调用前的值,从而释放新变量使用的内存。

自动存储持续性:在函数中声明的函数参数和变量的存储持续性为自动,作用域为局部,没有链接性。

静态持续变量:C++为静态存储持续性变量提供3中链接性:1、外部链接性(可在其他文件中访问);2、内部链接性(只能在当前文件中访问);3、?无链接性(只能在当前函数或代码块中访问)。这三种链接性都在整个程序执行期间存在。

头文件中定义的静态全局变量,每个使用它的源文件都会为其分配内存空间,且地址都不一样,所以不要在头文件中定义变量。
不要在头文件内定义全局变量,直接在头文件中定义全局变量,然后有多个文件包含这个头文件时,编译通过不了,提示重复定义变量
常量在头文件中进行声明时,在其他文件中使用extern进行引用就能直接使用,具有内部全局连接性,只有不含有extern的常量才可以初始化,且每个文件的常量都不是同一个地址的。如果希望常量具有外部链接性,则可以使用extern关键字来覆盖默认的内部链接性:
extern const int states = 50;

所有函数的存储持续性都是自动为静态的,即在整个程序执行期间都一直存在。默认函数链接性为外部的。可在函数原型中使用关键字extern来指出函数是在另一个文件中定义的。可通过static将函数的链接性设置为内部的,使之只能在一个文件中使用。必须同时在原型和函数定义汇总使用该关键字。?内联函数的定义可以放在头文件内,非内联函数不可。

由于静态变量的数目在程序运行期间是不变的,因此程序分配固定的内存块来存储所有的静态变量?,这些变量在整个程序执行期间一直存在。如果没有显示初始化静态变量,编译器默认设置为0。? 默认情况下全部变量的链接性为外部的,而const全局变量的链接性为内部的。

int global = 1000;               //外部链接性的静态变量
static int one_file = 50;        //内部链接性的静态变量
int main()
{
    return 0;
}

void func(int n)
{
    static int count = 0;        //无链接性的静态变量
}
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-03-03 15:50:34  更:2022-03-03 15:51:42 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 7:48:52-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码