const常量问题
我有几个问题 请一一解答 万分感谢
1 const常量在c++中有时分配储存空间 又是不分配 是怎么回事
2 比如说const int a[3]={1,2,3};
int b[3]={1,2,3};
cout<<b[a[2]]<<endl; 报错 为什么?const的数组和普通数组有什么不同?
3在c中const int buf=100;
int a[buf]; 报错 为什么?在c++中就可以 为什么
请详细的解释一下const 的内存是如何分配的 什么时候分 什么时候不分配内存 (c++什么时候不分配 )
[解决办法]
3题
C语言关键字const就是用来限定一个变量不允许被改变的修饰符(Qualifier)。上述代码中变量buf被修饰为只读变量,可惜再怎么修饰也不是常量。而ANSI C规定数组定义时长度必须是“常量”,“只读变量”也是不可以的,“常量”不等于“不可变的变量”。
但是在标准C++中,这样定义的是一个常量,这种写法是对的。实际上,根据编译过程及内存分配来看,这种用法本来就应该是合理的,只是ANSI C对数组的规定限制了它.
[解决办法]
const是让你关心某些东西是“不变”的,而不是让你关心这“不变”的东西是有内存的还是没内存的。
[解决办法]
const int buf=100;
对C来说,buf仍是个变量,只是const限制你不可修改;
而对C++来说,buf是个真正意义上的常量,而且怎么实现,是没有规定的(即可以有内存,也可以没有内存)。
[解决办法]
分不分配内存看右值,如果右值是常量的话,const int a = 3; a只是常量区的一个引用,应该是没有内存;右值是变量的话,const int a = b; 只有在b发生变化时,a才会被分配内存。
c++中,const的准确意思是readonly,墙头草,是不是变量,得看右值是常量还是变量。
c中,const的准确意思是readonly variable,老顽固,怎么着都是变量。
没有为什么,编译器就这么定的。