| |
|
开发:
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来指出函数是在另一个文件中定义的。可通过static将函数的链接性设置为内部的,使之只能在一个文件中使用。必须同时在原型和函数定义汇总使用该关键字。?内联函数的定义可以放在头文件内,非内联函数不可。 由于静态变量的数目在程序运行期间是不变的,因此程序分配固定的内存块来存储所有的静态变量?,这些变量在整个程序执行期间一直存在。如果没有显示初始化静态变量,编译器默认设置为0。? 默认情况下全部变量的链接性为外部的,而const全局变量的链接性为内部的。
|
|
C++知识库 最新文章 |
【C++】友元、嵌套类、异常、RTTI、类型转换 |
通讯录的思路与实现(C语言) |
C++PrimerPlus 第七章 函数-C++的编程模块( |
Problem C: 算法9-9~9-12:平衡二叉树的基本 |
MSVC C++ UTF-8编程 |
C++进阶 多态原理 |
简单string类c++实现 |
我的年度总结 |
【C语言】以深厚地基筑伟岸高楼-基础篇(六 |
c语言常见错误合集 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |