常量数据在C#,C++和C中的意义和区别

首先,说一下在C#中的情况:

一. const关键字:

    const是用来定义常量(它在赋初始值后从未变过),在定义时必须为其指定初始值。

    const所定义的常量字段是隐式静态的,即你可以直接在类级别上进行调用,而不在对象实例上。

    const定义的常量,最大的限制就是:在编译时必须知道常量的值。

 

二.readonly关键字:

    readonly严格说是定义变量的,不过,其上赋初值之后不能改变。

    readonly字段的值可以在运行时而不是编译时决定,但仅限于在构造函数中赋值,其它地方是违法的。

    readonly字段不是隐式静态的。如果希望和const字段一样在类级别公开,则必须显示使用static关键字。

 

再来,谈谈在C语言中的情况:

    const关键字修饰的变量在C中是变量,准确点就是只读的变量(相当于C#中的readonly字段)。其值在编译时不能

    被使用,因为编译器在编译时不知道其存储内容。如下面的例子,在C中运行编译器提示出错。

 

const int Max=100;
int Array[Max];

    值得注意的是:在C编译器中,通常不为const只读变量分配存储空间,而是将它们保存在符号表中,这使得它成为一个

编译期间的值,没有了存储与读内存的操作,使得它的效率很高。

其值在编译时未知。

以上C语言部分参考《C语言深度解剖》

 

最后,来说一下C++语言里的情况:

    const关键字其作用是把一个对象转换成一个常量。其定义后不能被修改,且定义时必须被初始化。其值在编译时已知(这点类似于C#处理的情况)。

    有一点要注意:

        在全局作用域声明的const常量是定义该对象的文件的局部变量(一般情况,在全局中声明的都是全局变量)。此变量只有存在于那个文件中,不能被其他文件访问。除非显示的指定const常量为extern,才可以。

        非const常量默认为extern。要使const常量能够在其它的文件中访问,必须显示地指定它为extern。

posted @ 2012-05-23 22:07  rarry  阅读(898)  评论(0编辑  收藏  举报