【发布时间】:2010-11-16 23:03:18
【问题描述】:
为什么你可以这样欺骗编译器:
const int a = 5;
*((int*)&a)=5; // VC/armcc does not complain
当上面的“删节”相当于:
const int *ptr2const = &a;
int *ptr = ptr2const; // as expected error is raised here
*ptr = 5;
【问题讨论】:
-
您的代码的第二个版本与第一个版本不“等效”。 C 语言需要显式类型转换才能从指针类型中删除限定符;正确的编译器可以(并且应该)拒绝您编写的第二段代码。可悲的是,大多数人只是发出警告。