C++ Primer Plus学习:第九章
C++第九章:内存模型与名称空间
C++在内存中存储数据方面提供了多种选择。可直接选择保留在内存中的时间长度(存储持续性)以及程序哪一部分可以访问数据(作用域和链接)等。
单独编译
程序分为三个部分:
- 头文件:包含结构声明和使用这些结构的函数原型。
- 源代码文件:包含于结构有关的函数代码
- 源代码文件:包含调用与结构有关的函数代码
一般头文件中不包含函数定义与变量声明。如果程序的两个文件均包含该文件会错误。
头文件中通常包含的内容:
- 函数原型
- 使用#define或const定义的符号变量
- 结构声明
- 类声明
- 模板声明
- 内联函数
包含自定义的头文件时使用双引号。
如:#include"myheader.h"
不能使用尖括号,如果使用尖括号,C++编译器将在存储标准头文件的主机系统的文件系统中查找。
1.2 头文件管理
在同一个文件中只能将头文件包含一次,为了防止重复包含,在头文件中包含头文件采用如下技术:
#ifndef FILENAME_H_
#define FILENAME_H_
//place include file contents here
#endif
存储持续性、作用域和链接性
作用域:描述了名称在多大范围内可见。
链接性:描述名称如何在不同单元间共享
自动存储持续性:函数中声明的参数与变量。作用域为局部,没有链接性。
全局变量与局部变量可以同名,在局部变量定义的代码块中,全局变量被屏蔽。
自动变量被存放在栈中,栈是一种后进先出(LIFO)的结构。
静态持续变量:外部链接性,内部链接性与无链接性。
1)外部链接性:即全局变量,外部文件可访问,在函数外定义。整个程序只能有一个同名的外部变量,同一程序的不同文件不能定义同名的外部变量。
2)内部链接性:在函数外定义,使用关键字static。作用域为整个文件。
3)无链接性:在代码块内部定义,使用关键字static。作用域为代码块,生存周期为整个函数。
静态变量均为零初始化的,即若没赋初值,则系统自动赋为零。
其他文件引用本文件的全局变量必须使用extern关键字。如:extern 数据类型 全局变量标识符。
无链接性的静态变量作用域在代码块中,但是生存周期为整个程序,而且值保持不变。且定义和初始化只进行一次,第二次调用时,跳过初始化。
限定符:const和volatile。
说明符:auto,register,static,extern,thread_local,mutable。
volatile:不进行优化,将某变量存入寄存器。
mutable:允许修改const的结构成员。
例:struct data{mutable int a};
const data veep={…};veep.a=10; //a的值可被修改
const规定了全局变量为内部链接性,不可在不同文件中共享,但可使用extern覆盖。
在函数或者代码块中定义const常量的话,作用域为代码块。
函数不可以嵌套定义,
使用new运算符初始化:
int *pi=new int (6);
定位new运算符:
例:char buffer1[50];
int *p2;
p2=new (buffer1) int;
为p2分配buffer1中的一块存储区域。
名称空间
声明区域:可以在其中进行声明的区域,如全局变量为整个文件,局部变量为所在的代码块。
潜在作用域:从声明区域开始,到声明区域的结尾。
作用域:变量对程序可见的范围
namespace Jack{double pail,…}
名称空间可以是全局的,可也以位于另一个名称空间中,但不能位于代码块中。
using声明:由被限定的名称和它前面的关键字using构成,如:using Jill::fetch;不支持重名。
using编译指令:using namespace Jill;在代码块中支持重名。
未命名的名称空间的潜在作用域为从声明点到该声明区域的末尾。
C++ Primer Plus学习:第九章的更多相关文章
- C语言学习第九章
学习C语言的最后一节课了,原因嘛上一章的末尾说过了,其实写这篇博客的时候以后开始学习Java一个多月了,一直因为各种各样的原因没有坚持做到每天一篇学习记录,可能主要因为懒吧....也有点笨,Java的 ...
- 【转载】Gradle学习 第九章:Groovy快速入门
转载地址:http://ask.android-studio.org/?/article/17 To build a Groovy project, you use the Groovy plugin ...
- Python爬虫学习==>第九章:正则表达式基础
学习目的: 正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特点字符.及这些特点字符组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑. 正式步骤 Step1 ...
- java并发学习--第九章 指令重排序
一.happns-before happns-before是学习指令重排序前的一个必须了解的知识点,他的作用主要是就是用来判断代码的执行顺序. 1.定义 happens-before是用来指定两个操作 ...
- C++ Primer高速学习 第一章 获得二:输入和输出 (IO)
什么是输入输出.即Input-Output,缩写是非常装B的IO?请看经典民间解释: C++语言的输入输出是指信息从外部输入设备(如键盘.磁盘等)向计算机内部(内存)输入(即Input)和从内存向外单 ...
- UNP学习第九章 基本名字与地址转换
之前都用数值地址来表示主机(206.6.226.33),用数值端口号来标识服务器. 然而,我们应该使用名字而不是数值:名字比较容易记,数值地址可以改变但名字保持不变. 随着往IPv6上转移,数值地址变 ...
- 《Django By Example》第九章 中文 翻译 (个人学习,渣翻)
书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者@ucag 注:哈哈哈,第九章终于来啦 ...
- Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第九章:贴图
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第九章:贴图 代码工程地址: https://github.com/j ...
- 鸟哥的linux私房菜——第九章学习(vim编辑器)
第九章vim编辑器 1.0).vi与vim Linux下文本界面的文书编辑器通常会有常常听到的就有: emacs, pico, nano, joe, 与 vim 等等. vi的优势: 所有的 Unix ...
随机推荐
- 百度地图热力图--批量地址转换应用(基于百度api)
需求:把外卖订餐地址做个用户分布热力图 思路分析:第一步去百度地图api开放平台找例子 http://lbsyun.baidu.com/jsdemo.htm#c1_15 首先从百度API的demo例子 ...
- MIPI调试经验(转载)
目录 一.D-PHY 1.传输模式 2.Lane States 3.Lane Levels 4.操作模式 5.时序要求 二.DSI 1.线路构成 2.两种接口的 LCD 3.数据包类型 4.从控制器到 ...
- Laravel框架定时任务2种实现方式示例
本文实例讲述了Laravel框架定时任务2种实现方式.分享给大家供大家参考,具体如下: 第一种 1.生成一个commands文件 > php artisan make:command test ...
- dtree的自定义select动作
项目中用到了dtree,别问我为什么用这么古老的插件,因为简单啊orz,文件树的条目不多,detree加载卡顿的问题也不用解决,开森. 在使用过程中在选择节点后需要自定义一些onclick的动作,本来 ...
- 对SSL一个疑问的新理解
看了很多关于Https/SSL的介绍,关于数字证书部分,我一直有个疑问:如果数字证书文件被别人拿到,那是不是就可以进行通讯了呢?如果这样,那整个安全机制就完全失去作用了.从开发的角度,我拿到别人的数字 ...
- Linux入门第二天——基本命令入门(下)
一.帮助命令 1.帮助命令:man (是manual手册的缩写,男人无所不能,/笑哭) 更多man用法以及man page的用法,参见:http://www.linuxidc.com/Linux/20 ...
- 20155318Java课堂实践20170510
20155318Java课堂实践20170510 修改教材P98 Score2.java 让执行结果数组填充是自己的学号:提交在IDEA或命令行中运行结查截图,加上学号水印,没学号的不给成绩 代码 p ...
- WPF 任务栏颜色 - 简书
原文:WPF 任务栏颜色 - 简书 先看看效果,这种效果可以用来做进度条或者消息通知闪烁. image.png image.png image.png image.png 有一个好消息 ...
- Object重写equals()、hashcode()方法的原因
一.问题 在我们新建java对象的时候,如果后期用到对象比较,就必须重写equals(0.hashcode()方法 为什么必须重写这两个方法? 只是比较相等的话,重写equals()方法不就可以吗?为 ...
- IDEA 运行报错 failed to create a child event loop
背景 在IDEA中写了测试代码,但是运行的时候一直提示 java.lang.IllegalStateException: failed to create a child event loop ... ...