事情的起因呢,我就不说了,总之今天花了两个小时研究了一下C++中的const const_cast行为,发现与原先预想的很不一样...
先看一段代码:
const
#include
int main()
{
const int a=2;
const int * b=&a;
printf("%d, %d, %d, %d\n", a, *b, &a, b);
int * c=const_cast
(b);
printf("%d, %d\n", *c, c);
*c=4;
printf("%d, %d, %d, %d, %d, %d\n", a, &a, *b, b, *c, c);
const int e=a;
printf("%d, %d, %d, %d\n", e, &e, &a, *(&a));
int d=(int)&a;
printf("%d, %d, %d, %d, %d\n", a, &a, d, &d, *(int *)d);
const int * f=&a;
printf("%d, %d\n", *f, f);
}
过客们知道其中玄机的可以忽略本文,不知道的可以先想一想预想的结果...再运行一下...看一下实际的结果...
大体的意思呢,就是我申明了一个int类型的const变量...
然后呢用const_cast 将const属性去掉了,再去输出其值...看一下结果...预想的结果,凡是输出a的地方,应该都变成了4...
实际上...结果是这个样子的...
2, 2, 2423784, 2423784
2, 2423784
2, 2423784, 4, 2423784, 4, 2423784
2, 2423748, 2423784, 2
2, 2423784, 2423784, 2423736, 4
4, 2423784
请按任意键继续. . .