• C++ Primer Plus学习:第九章


    C++第九章:内存模型与名称空间

    C++在内存中存储数据方面提供了多种选择。可直接选择保留在内存中的时间长度(存储持续性)以及程序哪一部分可以访问数据(作用域和链接)等。

    • 单独编译

    程序分为三个部分:

    • 头文件:包含结构声明和使用这些结构的函数原型。
    • 源代码文件:包含于结构有关的函数代码
    • 源代码文件:包含调用与结构有关的函数代码

    一般头文件中不包含函数定义与变量声明。如果程序的两个文件均包含该文件会错误。

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

    • 函数原型
    • 使用#defineconst定义的符号变量
    • 结构声明
    • 类声明
    • 模板声明
    • 内联函数

    包含自定义的头文件时使用双引号。

    如:#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;在代码块中支持重名。

    未命名的名称空间的潜在作用域为从声明点到该声明区域的末尾。

  • 相关阅读:
    第十三周进度
    第十二周进度
    单词统计
    Vue——初级小项目(小清单)
    Vue——修饰符
    vue——表单输入绑定
    vue——计算属性和监听器
    vue——指令系统介绍
    面试笔试
    python之路——二分查找算法
  • 原文地址:https://www.cnblogs.com/xyb930826/p/5267022.html
Copyright © 2020-2023  润新知