LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1399|回复: 7

c++ const_cast 问题求教

[复制链接]
发表于 2006-2-22 15:55:50 | 显示全部楼层 |阅读模式
程序如下:
#include <iostream>
using namespace std;

int main() {
    const int i = 10;
    int &n = const_cast<int&>(i);

    n = 100;

    cout << "i address is " << &i << "\n"
            << "n address is " << &n << "\n";

    cout << " i value is " << i << "\n"
            << "n value is " << n << endl;
}

可以看出去常量后n对i的引用依然有效而且实际指向的地址一样

但是通过n赋值后为什么i的值就没有改变呢???

小弟现在还再学习c++ 这点给我弄糊涂了!!!!
发表于 2006-2-22 23:08:10 | 显示全部楼层
Post by aishen944
程序如下:
#include <iostream>
using namespace std;

int main() {
    const int i = 10;
    int &n = const_cast<int&>(i);

    n = 100;

    cout << "i address is " << &i << "\n"
            << "n address is " << &n << "\n";

    cout << " i value is " << i << "\n"
            << "n value is " << n << endl;
}

可以看出去常量后n对i的引用依然有效而且实际指向的地址一样

但是通过n赋值后为什么i的值就没有改变呢???

小弟现在还再学习c++ 这点给我弄糊涂了!!!!


编译器的这种处理是合理的,对于const类型的i,在编译的时候就已经用10代替了,所以不管那个地址的数据怎么变,都不会影响i的值
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-2-23 00:09:13 | 显示全部楼层
明白了  多谢!!!
回复 支持 反对

使用道具 举报

发表于 2006-2-23 15:32:18 | 显示全部楼层
斑竹真是强呀!
我画蛇添足一下,写了个const_cast的常规用法。说实在的,我们这些用C++的同学要多了解一下标准C++中的新东西,头脑不要局限在VC6.0那个阶段。
  1. [matt@localhost tmp]$ cat const.cpp
  2. #include <iostream>
  3. using namespace std;
  4. void abc(const int & i)
  5. {
  6.   int &n = const_cast<int&>(i);
  7.   n = 100;
  8. }
  9. int main() {
  10.   int i = 10;
  11.   cout << " i value is " << i << "\n";
  12.   abc(i);
  13.   cout << " i value is " << i << "\n";
  14.   return 0;
  15. }
  16. [matt@localhost tmp]$ g++ const.cpp
  17. [matt@localhost tmp]$ ./a.out
  18. i value is 10
  19. i value is 100
  20. [matt@localhost tmp]$
复制代码
回复 支持 反对

使用道具 举报

发表于 2006-4-29 15:41:02 | 显示全部楼层
Post by rickxbx
编译器的这种处理是合理的,对于const类型的i,在编译的时候就已经用10代替了,所以不管那个地址的数据怎么变,都不会影响i的值


不懂就别瞎说,还是斑竹呢。

技术不懂就看看标准,基础不好就看看编译。
回复 支持 反对

使用道具 举报

发表于 2006-4-29 16:49:01 | 显示全部楼层
不清楚这个问题是否和编译器相关,但在VC调试中,显示 i 的值已经被修改,但cout输出值还是10,谁能解释一下?
回复 支持 反对

使用道具 举报

发表于 2008-8-13 11:26:57 | 显示全部楼层

const_cast 的含义

const_cast的含义是去掉已有量的常属性,是去掉,同志们
回复 支持 反对

使用道具 举报

发表于 2008-8-13 12:02:16 | 显示全部楼层
Post by MatthewGong;1392308
斑竹真是强呀!
我画蛇添足一下,写了个const_cast的常规用法。说实在的,我们这些用C++的同学要多了解一下标准C++中的新东西,头脑不要局限在VC6.0那个阶段。

  1. [matt@localhost tmp]$ cat const.cpp
  2. #include <iostream>
  3. using namespace std;

  4. void abc(const int & i)
  5. {
  6.   int &n = const_cast<int&>(i);
  7.   n = 100;
  8. }

  9. int main() {
  10.   int i = 10;

  11.   cout << " i value is " << i << "\n";
  12.   abc(i);
  13.   cout << " i value is " << i << "\n";

  14.   return 0;
  15. }

  16. [matt@localhost tmp]$ g++ const.cpp
  17. [matt@localhost tmp]$ ./a.out
  18. i value is 10
  19. i value is 100
  20. [matt@localhost tmp]$
复制代码



abc本身的参数时const int & i,C++引用的本质还是传指针
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表