C++ Primer 学习笔记_4_变量和基本类型(续1)

2014-11-24 11:34:42 · 作者: · 浏览: 0

变量和基本类型



四、const限定符

#include 
  
   

int main()
{
	//for循环语句存在两个问题
	for (int index = 0;index != 512; ++index)
	{
		//...
	}
	return 0;
}
/*
*1、程序的可读性:存在魔数512[魔数:他的意义在上下文中并没有体现出来,好像这个数是魔术般变出来的]
*2、程序的可维护性...
*/
  

1、定义const对象

	//bufSize此时是一个左值,但是现在这个左值不可修改!
	const int bufSize = 512;

因为常量在定义之后就不能修改,所以定义时就必须初始化!



2、const对象默认为文件的局部变量

除非特殊说明,在全局作用域中声明的const变量是定义该对象的文件的局部变量,此变量只存在于那个文件中,不能被其他文件访问!

如若想被其他文件访问,需要在const前加extern关键字!

//file_1.cc
	extern const int bufSize = 512;

//file_2.cc
	extern const int bufSize;
	for (int index = 0;index != bufSize; ++index)
	{
		//...
	}

【说明:】非const对象默认为extern。而const对象默认为非extern,要使const变量能够在其他的文件中访问,必须显式指定它为extern。

P50

//习题2.23(b)下列语句是否正确
	int cnt = 0;
	const int sz = cnt;

五、引用

引用的主要作用是用作函数的形式参数。

1、下列语句是否正确

	int ival = 1024;		//正确
	int &refVal_1 = ival;		//正确
	int &refVal_2 = refVal_1;	//正确
	int &refVal_3;			//错误


2、当引用初始化之后,主要该引用存在,他就保持绑定到初始化时的对象,不能将引用绑定到另外一个对象!

初始化是指定引用指向哪个对象的唯一方法!


3、const引用[指向const对象的引用]

/*
*仅仅允许const应用绑定到需要临时变量作为媒介来完成完全绑定过程的值
*因为const引用是只读的,即:
*非const引用只能绑定到与该引用相同类型的对象,
*const引用则可以绑定到不同但相关的类型的对象或绑定到右值。
*理解下面程序:
*/
	int ival = 1024;
	const int &refVal_1 = 1024;
	const int &refVal_2 = ival;
//	int &refVal_3 = refVal_2;

	int i = 42;
	const int &r = 42;
	const int &r2 = r + i;

	double dval = 3.14;
	const int &refDval = dval;	//如果int前的const去掉对不对呢?

P52

//习题2.25,判断下列程序的输出结果
#include 
  
   

int main()
{
	int ival = 2.01;
	int &rval2 = ival;
	const int &rval3 = 1;
	rval2 = rval3;
	++ rval2;
	std::cout << rval3 << std::endl;
	return 0;
}
  

六、typedef

typedef用开定义类型的同义词

	typedef double wages;
	typedef wages salary;
//typedef定义以关键字typedef开始,后面是数据类型和标识符,标识符或类型名并没有引入新的类型,而至是现有的数据类型的同义词。

typedef通常被用于以下三种目的:

1、为了隐藏特定类型的实现,强调使用类型的目的

2、简化复杂的类型定义,使其更易理解

3、允许一种类型用于多个目的,同时使得,每次使用该类型的目的明确