《C++ Primer Plus 6th》读书笔记 - 第九章 内存模型和名称空间

1. 单独编译

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

  • 函数原型
  • 使用#define或const定义的符号常量
  • 结构声明
  • 类声明
  • 模板声明
  • 内联声明

1.2 只需将源代码文件加入到项目中,而不用加入头文件。这是因为用#include管理头文件。

1.3 避免多次包含同一个头文件

1 #ifndef COORDIN_H_
2 #define COORDIN_H_
3 // place include file contents here
4 #endif

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

1. 存储方案:

  • 自动存储持续性 - 在函数定义中声明的变量,2种
  • 静态存储持续性 - 在函数外定义的变量和使用关键字static定义的变量,3种
  • 线程存储持续性(C++11) - thread_local声明
  • 动态存储持续性 - 用new运算符分配的内存一直存在,直到使用delete运算符将其释放或程序结束

2. 链接性为外部的名称可在文件间共享,链接性为内部的名称只能由一个文件中的函数共享。

3. 使用关键字register建议编译器使用CPU寄存器来存储自动变量,旨在提高访问变量的速度。(与auto以前的用法相同,C++11废弃)。

4. 静态存储持续性变量提供了3种特性:外部链接性(代码块外部声明)、内部链接性(代码块外部static声明)和无连接性(代码块内部static声明)。默认情况下,没有显式初始化的静态变量都被编译器设置为0。

5. C++11 新增关键字constexpr,增加创建常量表达式的方式。

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

7. 作用域解析运算符(::)表示使用变量的全局版本。

时间: 2024-11-07 07:54:42

《C++ Primer Plus 6th》读书笔记 - 第九章 内存模型和名称空间的相关文章

C++ primer plus读书笔记——第9章 内存模型和名称空间

第9章 内存模型和名称空间 1. 头文件常包含的内容: 函数原型. 使用#define或const定义的符号常量. 结构声明. 类声明. 模板声明. 内联函数. 2. 如果文件名被包含在尖括号中,则C++编译器将在存储标准头文件的主机系统的文件系统中查找.但如果头文件名包含在双引号中,则编译器将首先查找当前的工作目录或源代码目录(或其他目录,这取决于编译器).如果没有在那里找到头文件,则将在标准位置中查找.因此在包含自己的头文件时,应使用引号而不是尖括号. 3. 链接程序将目标文件代码.库代码和

《C++ Primer Plus》第9章 内存模型和名称空间 学习笔记

C++鼓励程序员在开发程序时使用多个文件.一种有效的组织策略是,使用头文件来定义用户类型,为操纵用户类型的函数提供函数原型,并将函数定义放在一个独立的源代码文件中.头文件和源代码文件一起定义和实现了用户定义的类型及其使用方式.最后,将main()和其他使用这些函数的函数放在第三个文件中.C++的存储方案决定了变量保留在内存中的事件(存储持续性)以及程序的哪一部分可以访问它(作用域和链接性).自动变量在代码块(如函数体或函数体中的代码块)中定义的变量,仅当程序执行到包含定义的代码块时,它们才存在,

《C++ Primer Plus》读书笔记之七—内存模型和名称空间

第九章 内存模型和名称空间 1.不要将函数定义或者变量声明放到头文件中. 2.头文件常包含的内容:函数原型.使用#define或者const定义的常量.结构声明.类声明.模板声明.内联函数. 3.避免多次包含同一个头文件的技术:#ifndef/#endif.仅当以前没有使用预处理器编译指令#define定义一个头文件名称时,才处理#ifndef和#endif之间的语句. 4.链接性描述了名称如何在不同单元间共享.链接性为外部的名称可在文件间共享,链接性为内部的名称只能由一个文件中的函数共享.自动

读书笔记第九章

第九章HAL是建立在linux驱动之上的一套程序库.这套程序库并不属于linux内核,而是属于linux内核层之上的应用层.可以用来保护不想公开源代码的作者.HAL架构比较简单,其基本原理就是在安卓系统中使用程序库调用位于内核空间的linux驱动,然后安卓应用程序可以通过NDK程序访问HAL中的程序库,或直接在安卓应用程序中访问HAL中的程序库.编写一款支持HAL的linux驱动程序的步骤:1.编写linux驱动,linux驱动的代码要尽量简介,尽可能将业务逻辑放到HAL library中.2.

C primer plus 读书笔记第九章

本章的标题是函数.C的设计原则是把函数作为程序的构成模块. 1.函数概述 函数的定义:函数是用于完成特定任务的程序代码的自包含单元. 使用函数的原因:1.函数的使用可以省去重复代码的编写.2.使得程序模块化,更有利于阅读.修改和完善.以这种方式看待函数有利于把精力投入到程序整体设计而不是实现其细节. 函数同变量一样有多种类型.任何程序在使用函数之前都需要声明该函数类型. 函数参数.函数类型没啥说的,其他语言都会讲到. PS:函数的结尾最好只使用一次return,这样更有利于阅读程序的人明白函数的

C++ Primer Plus 6th 读书笔记 - 第6章 分支语句和逻辑运算符

1. cin读取错误时对换行符的处理 1 #include <iostream> 2 3 using namespace std; 4 5 int main() { 6 double d; 7 char c; 8 cin >> d; 9 if(!cin) { 10 cout << "x" << endl; 11 cin.clear(); 12 cout << cin.get() << endl; 13 } 14 /

Redis Essentials 读书笔记 - 第九章: Redis Cluster and Redis Sentinel (Collective Intelligence)

Chapter 9. Redis Cluster and Redis Sentinel (Collective Intelligence) 上一章介绍了复制,一个master可以对应一个或多个slave(replica), 在以下的情况下是够用的: 1. master有足够内存容纳所有key 2. 通过slave可以扩展读,解决网络吞吐量的问题 3. 允许停止master的维护窗口时间 4. 通过slave做数据冗余 但复制解决不了自动failover和自动resharding的问题,在以下的情

《利用python进行数据分析》读书笔记--第九章 数据聚合与分组运算

对数据进行分组并对各组应用一个函数,是数据分析的重要环节.数据准备好之后,通常的任务就是计算分组统计或生成透视表.groupby函数能高效处理数据,对数据进行切片.切块.摘要等操作.可以看出这跟SQL关系密切,但是可用的函数有很多.在本章中,可以学到: 根据一个或多个键(可以是函数.数组或DataFrame列名)拆分pandas对象 计算分组摘要统计,如计数.平均值.标准差.,或自定义函数 对DataFrame的列应用各种各样的函数 应用组内转换或其他运算,如规格化.线性回归.排名或选取子集等

《Python基础教程》 读书笔记 第九章 魔法方法、属性和迭代器(上)

构造方法 在Python中创建一个构造方法很容易.只要把init方法的名字从简单的init修改为魔法版本__init__即可: >>> class FooBar: ...     def __init__(self): ...         self.somevar=42 ... >>> f=FooBar() >>> f.somevar 42 给构造方法传几个参数 >>> class FooBar: ...     def __in