const修饰符
我们在C中,往往会使用 #define 来定义常量,比方说:
# define ABC=100
这个呢,就是在后面的程序中,反正有 ABC 这个标识符的,都用100来代替了。
然鹅,在预编译
{
ps: 预编译又称为预处理,是做些代码文本的替换工作。处理#开头的指令,比如拷贝#include包含的文件代码,#define宏定 义的替换,条件编译等
}
之后,程序中就不再有 ABC 这个标识符了。 因为 ABC 不是变量,没有类型,不占用存储单元,所以容易出错。
那么,C++ 中,就用 const 修饰符来定义常量。
for example:
const int ABC=100;
这个常量ABC是有类型,占用存储单元,有地址,可以用指针指向它,虽然不能修改。
其实 const 和 # define 的作用相似,但是在C++ 中,它消除了不安全性。比方说:
#include <iostream>
using namespace std;
int main()
{
int a=1;
#define T1 a+a
#define T2 T1-T1
cout << "T2 is "<< T2 <<endl;
return 0;
}
从这个初看,似乎输出:
T2 is 0
但是,答案显然是错误的,在CB上运行为:
T2 is 2
原因就是C++ 把 第七行语句解释为了:
cout << "T2 is "<< a+a- a+a <<endl;
假如我们用 const 取代:
#include <iostream>
using namespace std;
int main()
{
int a=1;
const T1 a+a
const T2 T1-T1
cout << "T2 is "<< T2 <<endl;
return 0;
}
运行结果为:
所以,符合我们所期待的结果。