const在C++ 和C 中的比较

来源:互联网 发布:影响因素分析模型知乎 编辑:程序博客网 时间:2024/06/04 19:03

目前,我们讨论的是C++99和C89 的标准;

C语言

在C语言(C89标准)中, const 的特性:

const int size=10//正确(常变量)int array[size]={0}  //错误(常变量不能用做数组下标)

C++语言

const int size=10//正确(常量)int array[size]={0}  //正确

这是什么原因呢?其实是在C语言和C++语言中,两者的编译方式有区别:
(1)C语言中把const还当做变量编译;
(2)C++语言中凡是出现常量的地方(编译时初始化)均用值来替换。
由于const 对象一旦创建后其值就不能再改变,所以const 对象必须初始化

const int i=get_size();  //正确,运行时初始化const int j=42;  //正确,编译时初始化const int k;//错误,k未经初始化

如果利用一个对象去初始化另外一个对象,则他们是不是const都没有关系。

int i=42;const int ci=i;  //正确,i的值被拷贝给了ciint j=ci;   //正确,ci的值被拷贝给了j

ci 的常量特征仅仅在执行改变ci 的操作才会发挥作用。

总结:
(1)C++语言和C语言对const的定义不同,C++语言中定义为常量,C语言中定义为常变量;
(2)两个语言对const的编译方式不同(详细见上面)
(3)C++语言中常量有向常变量退化的可能;同时,常量的“常”只是体现在修改它的值时才会发挥作用。

原创粉丝点击