关于const的一个问题
本帖最后由 xiacanni 于 2013-08-09 20:21:56 编辑
今天在一个博客中看到说const的值也可以修改。(网址:http://lalalah.pixnet.net/blog/post/31677924-%5B%E8%BD%89%5Dc%E7%9A%84%E9%97%9C%E9%8D%B5%E5%AD%97%E2%80%94%E2%80%94const%E7%9A%84%E7%90%86%E8%A7%A3%E5%92%8C%E7%94%A8%E6%B3%95)
于是自己试了一下,发现却不能修改。后来发现修改一个地方就可以修改了。(这段说的好乱,看我的代码吧。)
多以现在对const的一些问题感到疑惑。不知道这个现象是编译器的问题,还是C或C++规范中定义了就是这个样子。
我的代码如下:
#include
void constProblem(void);
void constProblem2(void);
int main()
{
constProblem();
constProblem2();
}
void constProblem(void)
{
printf("[const problem1]\n");
const int num = 1;
int *pointer=(int *)#
*pointer=100;
int num2=num;
int num2_pointer=*pointer;
printf("num = %d\n",num);
printf("*pointer = %d\n",*pointer);
printf("num2 = %d\n",num2);
printf("num2_pointer = %d\n",num2_pointer);
int *pointer2=pointer;
printf("address of num = %p\n",&num);
printf("pointer = %p\n",pointer);
printf("pointer2 =%p\n",pointer2);
}
void constProblem2(void)
{
printf("\n[const problem2]\n");
int num_pre=1;
const int &num = num_pre;
int *pointer=(int *)#
*pointer=100;
int num2=num;
int num2_pointer=*pointer;
printf("num = %d\n",num);
printf("*pointer = %d\n",*pointer);
printf("num2 = %d\n",num2);
printf("num2_pointer = %d\n",num2_pointer);
}
我的系统是win7 64。使用VS和minGW编译都是类似的结果
输出为:
图1:VS的输出
图2:minGW编译的输出
const
C
C++
分享到:
------解决方案--------------------
void constProblem(void)与常量折叠有关, 是优化的结果。
void constProblem2(void)是认识错误。
//表示不能通过num修改num_pre,不表示num_pre是只读的。
const int &num = num_pre;