开发者社区> 问答> 正文

c++用关于const变量的疑问

首先看下面一段代码:

 #include <iostream>

using namespace std;

int
main()
{
    const int i = 10;

    int *pi = const_cast<int *>(&i);
    ++*pi;
    cout << "  i = " << i << ", @" << &i << endl;
    cout << "*pi = " << *pi << ", @" << pi << endl;

}

运行结果是:
i = 10, @0x28ff44
*pi = 11, @0x28ff44
我想问的是,变量 i 的值到底有没有被改变?问什么同一个地址输出的值不一样?

展开
收起
a123456678 2016-03-05 11:15:53 1767 0
1 条回答
写回答
取消 提交回答
  • 这里是编译器决定的,你用VS2008调试就会发现,i的值在调试窗口里都是变化了的。但是const表示的是一个常量,不可变的,如果用const-cast又可将它改变,就自相矛盾了。
    于是编译器采取了一种方案,在汇编里可以看出端倪:

    cout << "  i = " << i << ", @" << &i << endl;

    004142B8 mov esi,esp
    004142BA mov eax,dword ptr [__imp_std::endl (41A348h)]
    004142BF push eax
    004142C0 mov edi,esp
    004142C2 lea ecx,[i]
    004142C5 push ecx
    004142C6 push offset string ", @" (417880h)
    004142CB mov ebx,esp
    004142CD push 0Ah
    004142CF push offset string " i = " (417878h)
    004142D4 mov edx,dword ptr [__imp_std::cout (41A34Ch)]
    004142DA push edx
    10是直接使用的(见上面的push 0Ah),并不是按我们的惯性思维从地址里去取的。

    2019-07-17 18:53:05
    赞同 展开评论 打赏
问答分类:
C++
问答地址:
问答排行榜
最热
最新

相关电子书

更多
使用C++11开发PHP7扩展 立即下载
GPON Class C++ SFP O;T Transce 立即下载
GPON Class C++ SFP OLT Transce 立即下载