首页 > 其他 > 详细

关于const的一点疑问

时间:2014-02-19 17:51:06      阅读:258      评论:0      收藏:0      [点我收藏+]

先上代码

bubuko.com,布布扣
#include <iostream>

using namespace std;

int main()
{
    // vector<int>::iterator it=const_cast<  vector<int>::iterator >(v.begin());
    // vector<const int>::iterator it=(v.begin());

    const int a=0;
    int &b=const_cast<int&>(a);
    //int &b=(int &)a;这个也可以
    b=10;
    cout<<a<<,<<b<<endl;
    cout<<&a<<,<<&b<<endl;

    const int c=0;
    int* d=const_cast<int*>(&c);
    // int *d=(int *)&c;
    *d=10;
    cout<<c<<,<<*d<<endl;
    cout<<&c<<,<<d<<endl;

    return 0;
}
bubuko.com,布布扣

输出0 10 并且两个&c跟d是同一个值

怀疑是编译优化把输出改成字面常量了,但是用gcc编译时开o0和-E发现跟猜想并不一样,确实是输出变量。所以不能理解了。。。

1 既然编译器允许去掉const修饰符,那通过指针或者引用修改const变量会发生什么?

2 如果是采取了修改const变量新开辟一块儿内存,那为什么地址一样?如果是在原来的地址修改了变量的值,为什么输出c和*d不是同一个值?

求大牛解答T_T

关于const的一点疑问

原文:http://www.cnblogs.com/lijianlin1995/p/3555059.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!