- #include <iostream>
-
- int main()
- {
-
- for (int index = 0;index != 512; ++index)
- {
-
- }
- return 0;
- }
-
-
-
-
#include <iostream>
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关键字!
-
- extern const int bufSize = 512;
-
-
- extern const int bufSize;
- for (int index = 0;index != bufSize; ++index)
- {
-
- }
//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
-
- int cnt = 0;
- const int sz = cnt;
//习题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;
int ival = 1024; //正确
int &refVal_1 = ival; //正确
int &refVal_2 = refVal_1; //正确
int &refVal_3; //错误
2、当引用初始化之后,主要该引用存在,他就保持绑定到初始化时的对象,不能将引用绑定到另外一个对象!
初始化是指定引用指向哪个对象的唯一方法!
3、const引用[指向const对象的引用]
-
-
-
-
-
-
-
- int ival = 1024;
- const int &refVal_1 = 1024;
- const int &refVal_2 = ival;
-
-
- int i = 42;
- const int &r = 42;
- const int &r2 = r + i;
-
- double dval = 3.14;
- const int &refDval = dval;
/*
*仅仅允许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
-
- #include <iostream>
-
- int main()
- {
- int ival = 2.01;
- int &rval2 = ival;
- const int &rval3 = 1;
- rval2 = rval3;
- ++ rval2;
- std::cout << rval3 << std::endl;
- return 0;
- }
//习题2.25,判断下列程序的输出结果
#include <iostream>
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 double wages;
typedef wages salary;
//typedef定义以关键字typedef开始,后面是数据类型和标识符,标识符或类型名并没有引入新的类型,而至是现有的数据类型的同义词。
typedef通常被用于以下三种目的:
1、为了隐藏特定类型的实现,强调使用类型的目的
2、简化复杂的类型定义,使其更易理解
3、允许一种类型用于多个目的,同时使得,每次使用该类型的目的明确