当前位置: 首页 > article >正文

《C++ Primer Plus》学习笔记|第9章 内存模型和名称空间 (24-12-1更新)

文章目录

  • 9.1 单独编译
  • 9.2 存储持续性、作用域和链接性
    • 9.2.3 静态持续变量
      • 3种连接性
        • 外部链接性
        • 内部链接性
        • 无链接性
    • 9.2.4 静态持续性、外部链接性
      • 两种变量声明
        • 定义声明
        • 引用声明
    • 9.2.7 说明符和限定符
      • 1. cv-限定符
        • const
        • volatile
        • 2. mutable
        • 3.const
    • 9.2.9 语言链接性
      • C++语言链接

9.1 单独编译

将程序分解为多个源文件(.cpp文件)和头文件(.h文件)进行分别编译,然后再链接成可执行程序的机制。这种方式有助于大型项目的组织和管理,提高编译效率。

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

作用域(scope)描述了名称在文件的多大范围内可见。
链接性(linkage)描述了名称如何在不同单元间共享。

寄存器变量

register in count_fast;

最初由C语言引入,建议编译器使用CPU寄存器,而在C++11之后,这种作用失去了,只是表示该变量是自动存储的。

9.2.3 静态持续变量

3种连接性

int global = 1000;    //static duration,external linkage
static intone file=50;//static duration.internal linkage
int main()
{
...
}
void funct1(int n){
	static int count=0://static duration,no linkage
	int llama =0;
}
外部链接性

可在其他文件中访问
在代码块的外面声明它

内部链接性

只能在当前文件中访问
必须在代码块的外面声明它,并使用static限定符

无链接性

只能在当前函数或代码块中访问
必须在代码块内声 明它,并使用static限定符

9.2.4 静态持续性、外部链接性

链接性为外部的变量通常简称为外部变量,它们的存储持续性为静态,作用域为整个文件。外部变量也称全局变量。

两种变量声明

定义声明

简称定义,给变量分配存储空间

引用声明

简称声明,不给变量分配存储空间,因为它引用已有的变量

引用声明使用关键字extern,且不进行初始化;否则,声明为定义,导致分配存储空间。

如果要在多个文件中使用外部变量,只需在一个文件中包含该变量的定义(单定义规则),但在使用该变量的其他所有文件中,都必须使 用关键字extern声明它。

9.2.7 说明符和限定符

1. cv-限定符

const
volatile

该关键字的作用是为了改善编译器的优化能力。
例如,假设编译器发现,程序在几条语句中两次使用了某个变量的值,则编译器可能不是让程序查找这个值两次,而是将这个值缓存到寄存器中。这种优化假设变量的值在这两次使用之间不会变化。
如果不将变量声明为volatile,则编译器将进行这种优化;将变量声明为 volatile,相当于告诉编译器,不要进行这种优化。

2. mutable

可以用它来指出,即使结构(或)变量为const,其某个成员也可以被修改

struct data{
	char name[30];
	mutable int accesses;
}
const data veep="Claybourne Clodde",0,...};
strcpy(veep.name,"Joye Joux");//not allowed
veep.accesses++               // allowed
3.const

const有一些问题,在默认情况下全局变量的链接性为外部的,但const全局变量的链接 性为内部的。也就是说,在C++看来,全局const定义就像使用了static说明符一样。

如果出于某种原因,程序员希望某个常量的链接性为外部的,则可
以使用extern关键字来覆盖默认的内部链接性:

extern const int states = 50; //definition with external linkage

9.2.9 语言链接性

C++语言链接

在 C++中,同一个名称可能对应多个函数,必须将这些函数翻译为不同的符号名称。因此,C++编译器执行名称矫正或名称修饰,为重载函数生成不同的符号名称。


http://www.kler.cn/a/418126.html

相关文章:

  • docker安装hadoop环境
  • 【网络】应用层协议HTTPHTTPcookie与sessionHTTPS协议原理
  • 搭建业务的性能优化指南
  • Vue入门级教程二:组件化开发
  • Wireshark常用功能使用说明
  • 系统架构:MVVM
  • 深入理解 Docker 在 CI/CD 流程中的应用原理
  • 处理HTTP请求的两种常见方式:多个处理器(Handler)、多个处理函数(HandleFunc),两者有什么区别
  • 传智杯 A字符串拼接
  • vxe-table 树形表格的详细用法、树形表格懒加载
  • 从实战出发,精通Cache设计与性能优化
  • 【iOS】OC高级编程 iOS多线程与内存管理阅读笔记——自动引用计数(二)
  • 机器学习模型从理论到实战|【007-SVM 支持向量机】 SVM的情感分类
  • js常见函数实现
  • Ubuntu 操作系统
  • 基于51单片机的心率体温监测报警系统(包括程序、仿真、原理图、流程图)
  • 2024年9月 GESP C++等级考试 真题及解析 三级
  • 理解Java集合的基本用法—Collection:List、Set 和 Queue,Map
  • day03(Linux底层)Tftp服务器环境搭建
  • 43 基于单片机的温度和烟雾检测
  • 计算机的错误计算(一百七十一)
  • jQuery零基础入门速通(下)
  • 新版本PasteSpider开发中专用部署工具介绍(让2GB的服务器也能使用CI/CD,简化你的部署过程)
  • 【ROS 机器人快速入门】
  • Elasticsearch ILM 索引生命周期管理讲解与实战
  • gitignore 不起作用