读高质量C++/C编程指南第5章

Posted TangguTae

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了读高质量C++/C编程指南第5章相关的知识,希望对你有一定的参考价值。

在此之前先讲一讲C++/C的内存分布

考虑32位的系统,总共的地址空间为2^32次方,即为4G大小,其中内核空间占用1G的大小,用户空间占用3G的大小。从低地址到高地址依次为代码段、数据段、堆、共享区、栈、内核空间。

其中代码段主要存放可执行代码、只读常量等;数据段存放全局数据、静态数据等;堆就是我们所熟知的动态内存开辟的空间就在堆上;栈存放非静态局部变量、函数参数、函数返回值等等;

注意:

代码段的地址不是从0x00000000开始的

堆的地址增长方向是向上增长的

栈的地址增长方向是向下增长的

共享区一般装载一个共享的动态内存库,用户可使用系统接口创建共享内存,用作进程间通信。


这一章讲的是常量,常量是一种标识符,它的值在运行期间恒定不变。常量放在内存中的代码段。C语言采用#define这种宏的方式来定义常量;而C++除了宏这种方式,还可以用const定义常量。

使用常量的好处:

1、程序的可读性强;例如要定义一个数组的大小,或者定义某个变量的边界值,直接写一个数并不直观,如果用常量可以取一个直观的名字。#define MAX 100或者const int MAX = 100; #define path "/home/user/bin"或者const char* path = "/home/user/bin";

2、便于批量修改;一旦要修改值的时候,可以避免重复的修改。

3、避免书写错误;在程序的很多地方输入同样的数字或字符串,难保不发生书写错误。

const与define的区别

1、const常量有数据类型,而宏常量没有数据类型。编译器可以对const类型的常量进行数据类型的安全检查。而define只进行了字符的替换,没有类型的安全检查。

2、const有调试信息,宏常量在预处理阶段已经被替换了,没有调试信息。

在类当中定义const类型的常量时,需要在定义的时候初始化。

因为类可以创建多个对象,不同对象其const数据成员的值可以不同。

class B

public:
	B(int a, int ref)
		:_n(10)//成员变量定义的地方,进行初始化
	
		_x=10;//可以初始化列表初始化,也可以在函数类初始化
	
private:
	const int _n; // const
	int _x;
;

补充:

类当中需要采用初始化列表的方式初始化的情况总共有三种:

1、自定义类型成员(没有合适的构造函数的类)

2、引用成员变量

3、const类型的变量

//包含这三种需要初始化的情况
class A

public:
	A(int a)
	:_a(a)

private:
	int _a;
;

class B

public:
	B(int a, int ref)
		:_aobj(a)
		,_ref(ref)
		,_n(10)//成员变量定义的地方,进行初始化
	
		_x=10;//不是这三种情况,可以初始化列表初始化,也可以在函数类初始化
	
private://这三个必须在初始化列表初始化
	A _aobj; // 没有默认构造函数
	int& _ref; // 引用
	const int _n; // const
	int _x;
	//成员变量声明的地方
;

以上是关于读高质量C++/C编程指南第5章的主要内容,如果未能解决你的问题,请参考以下文章

读高质量C++/C编程指南第6章

读高质量C++/C编程指南第4章

读高质量C++/C编程指南1-3章

C++内存管理 && 读高质量C++/C编程指南第7章

Linux操作系统-进程控制

《代码大全》读书笔记——week4