读书人

C++的类型转换const恒量指针的转换

发布时间: 2012-09-01 09:33:02 作者: rapoo

C++的类型转换,const常量指针的转换
#include<iostream.h>
//using namespace std


void App(int * &pa,int n);
void main()
{
const int t=3;
const int *p=&t;

(int)*p=0;
cout <<*(&t) <<t<<endl;
cout <<*p <<endl;
cout<<p<<endl;
cout<<&t;

}
&t和p地址一样,但t和*p的结果不一样?

[解决办法]
(int)*p=0应该编译不能通过,p所指向的内容是不能改变的。
[解决办法]
恩,前面说的对
起始也可以看编译出来的汇编代码
再用到t的地方,编译器直接用 3 替换的。

push3
movebx, esp
push3
movecx, DWORD PTR __imp_?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A
[解决办法]
(int)*p=0;
前面定义了const,常量值是不能改变的,编译会报错试图给常量赋值……
[解决办法]
这是常量折叠的问题,编译的时候const会被数值替代,如const int i = 8;i会被8替代,相当于#define i 8
运行期间,i地址的内容确实被改变了,但是i的值已经在编译期间被8所替代

读书人网 >C++

热点推荐