读高质量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;
	//成员变量声明的地方
};

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值