足底按摩反射区图:一个c++问题?

来源:百度文库 编辑:中科新闻网 时间:2024/05/11 02:09:02
问题是:
#include <iostream.h>
main()
{
const int a=5;
int* p=(int*)&a;
*p=6;
cout<<a<<*p;
}
我用VC编译后结果是56,但按理不是66吗?
我将程序改变为以下就不行:
#include <iostream.h>
main()
{
const int a=5;
int* p=&a;
*p=6;
cout<<a<<*p;
}
难道const类型的变量可以显式转换为非const类型的?

问题是这样解释的:
C++的便宜器在实现的时候对const 做了专门的处理,使得const int a =5;与#define a 5 几乎完全相同,来提高程序执行效率,所以,当执行*p = 6;时a所在的内存的内容确实变成了6,但是程序执行cout时并没有访问a的内存,而是直接用5这个常量代替a,因此你看到的输出结果是56.
那你要问了,便宜器这样做岂不是有问题嘛?是的,但C++的任何一本书中都会告戒程序员避免这种愚蠢的用法,既然定义为const,为什么还要去改变他的值呢?这样看来,便宜器的行为是合理的.如果你通过这种取巧的办法将一个常量的值改变了,那编译器才真正有问题了.

是的,可以显式转换。C语言就是这样,所有的类型都可以强制转换,而不会去考虑有什么后果。

什麽66啊
a 不改变,因为const是只读的

把第一句的const去掉就可以了。