c++中的常量和静态有什么区别?

如题所述

在全局域,不管const或是static都代表内存中是唯一。
不同之处在于const是个真正的唯一,不仅有唯一的地址,也有唯一的值;
而static仅仅有唯一的地址,其值可以被改变。
在局部域,比如说类,const丢失了地址的唯一性,保留了值的唯一性,因为一个类有很多个对象,而没个对象的地址肯定不同。
最有趣的是static,成为所有对象公用的一个地址,如果此时你还喜欢用const static,那还不如使用一个全局的const

关于静态常量(static const)?
是不该有在这个概念的。
因为,这还不如声明一个 无名enum 或者 无名namespace 好。
常量是说:“不能修改!或强烈建议别修改!”,const仅说明变量(或者函数)的不可修改性(或不修改别人)。
静态是说:“它是在静态数据区的变量”,static影响变量的作用域和存储域。

实际上,C++标准不赞成在名称空间和全局作用域中使用关键字static(该标准使用“不赞成”表明,这种做法,目前合法,但以后很可能将其视为非法)。例如,下面代码:

static int nCount;

int fun1();

int main()

{



}

int fun1()

{



}

C++标准的意思是,程序员应该这样做:

namespace

{

int nCount;

}

int fun1();

int main()

{



}

int fun1()

{



}

参考资料:http://hi.baidu.com/%CC%AB%B8%EE%B6%FA/blog/item/2792f28c4383c7ad0e244432.html

温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-02-06
区虽大了,常量 就是一个常量 值,常量的值不能被改变
静态首先就不是一个常量 ,值是可以随意改变的,只是它的生命期是和全局变量一样的追问

那就没有静态常量这样的说法了吗?

本回答被提问者采纳
第2个回答  2015-12-24
  "常量"在程序运行时,不会被修改的量。换言之,常量虽然是为了硬件、软件、编程语言服务,但是它并不是因为硬件、软件、编程语言而引入。
  常量区分为不同的类型,如25、0、-8为整形常量,6.8、-7.89为实型常量,'a''b'为字符常量。常量一般从其字面形式即可判断。这种常量称为字面常量或直接常量。
  静态变量的类型关键字是static。 静态变量当然是属于静态存储方式,但是属于静态存储方式的量不一定就是静态变量, 例如外部变量虽属于静态存储方式,但不一定是静态变量,必须由 static加以定义后才能成为静态外部变量,或称静态全局变量。 对于自动变量,它属于动态存储方式。 但是也可以用static定义它为静态自动变量,或称静态局部变量,从而成为静态存储方式。 由此看来,一个变量可由static进行再说明,并改变其原有的存储方式。