从const_cast引出的一个问题

原创 2006年05月24日 13:44:00

看到const_cast,于是想做一件正常的事:用const_cast移除某对象的常数性,修改之。于是像下面这样写:
        const int i = 10;
        //int& ri = const_cast<int>(i); // error! 
        int& ri = const_cast<int&>(i);
        ri = 0;
        cout << &ri << "=" << ri << endl;
        cout << &i << "=" << i << endl;

我一开始就写错了,得到编译器一个指示:invalid use of const_cast with type 'int', which is not a pointer, reference, nor a pointer-to-data-membe
r type(GCC4.0)。哦,原来如此!只是我以前不知道的:const_cast转型的类型必须是指针、引用。

编译是过了,可输出却不是我的想象:
0xbffffaac=0
0xbffffaac=10

我猜,也许是编译器做了手脚,对const int对象做了优化。另外一段代码也可以从旁辅证这个臆测,我把const的对象换成了string:
        const string s("this is a string");
        string& rs = const_cast<string&>(s);
        rs = "crack";
        cout << &rs << "=" << rs << endl;
        cout << &s << "=" << s << endl;

而输出是:
0xbffffa9c=crack
0xbffffa9c=crack

预料之中呀。

这样,我就自信一点了。推测,因为编译器不了解string,但是它太清楚那些内置型别了,于是就偷偷多做了一下事情。试验了一下,const char是如此,const char* const也是这般。我只在GCC4上面试了一下,偷懒了。如果果真是编译器这样优化了,那么有什么危害没有?换个提法,我们需要针对const内置型别用const_cast进行篡改活动吗?

我暂时没有想到用处。哈哈。

顺便引出个问题:引用有地址吗?

我想有地址吧,在计算机里面的东西没个地址怎么行呢。但是印象中(对不对哟??)c++并没有提供给我们方法去得到引用的地址。因为引用的地址是没有意义的。在我看来引用就相当于一个特殊的常量指针。定义就需要赋值,永不需要修改,地址的意义也就自然无从谈起了。

引用,一个扼守one life one love的人。 

C++中四种类型转换以及const_cast是否能改变常量的问题

we have four specific casting operators:dynamic_cast, reinterpret_cast, static_cast and const_cast. ...

C++的const_cast的问题

转自:http://blog.csdn.net/guogangj/article/details/1545119 和上一篇文章一样了,还是提起一下大约一年前我来公司面试所遇到的一道题目,题目很简...

const_cast问题

转自 http://blog.csdn.net/guogangj/article/details/1545119 C++的const_cast的问题 分类: Windows编程2007...

C++编码器军规(003):避免对一个声明为const的变量使用const_cast

const_cast的使用及风险分析

MFC遇到的一个字符集问题:不能将参数1从“const char []”转换为“LPCTSTR”

今天在使用vs2008+MFC时候,使用editControl的replacesel(“”)发生报错。如下::不能将参数1从“const char []”转换为“LPCTSTR”其解决方案就是, 在项...
  • kkk328
  • kkk328
  • 2011年07月18日 09:31
  • 2752

浅析c++中的类型转换--const_cast

csdn(床上等你)博客的排名终于不是千里之外了,有了具体的数字。。。今天就搞一个简单的介绍const_cast类型转换符。作用就是: 从类中移除 const、volatile 和 __unalig...

C++标准转换运算符const_cast

原文地址:http://www.cnblogs.com/ider/archive/2011/07/22/cpp_cast_operator_part2.html 前面讲了C++继承并扩展C语言的...

C++类型转化详解—const_cast

转自:C++类型转化详解—const_cast一. 函数描述: const_cast(expression) 主要是用来去掉const属性,当然也可以加上const属性。主要是用前者,后者很少用。...
  • zjwson
  • zjwson
  • 2016年05月17日 11:51
  • 211

C++标准转换运算符const_cast

前面讲了C++继承并扩展C语言的传统类型转换方式,最后留下了一些关于指针和引用上的转换问题,没有做详细地讲述。C++相比于C是一门面向对象的语言,面向对象最大的特点之一就是具有“多态性(Polymor...
  • zacklin
  • zacklin
  • 2012年03月27日 14:30
  • 209

C++标准转换运算符const_cast

C++提供了四个转换运算符以供显式类型转换,分别是: static_cast < new_type> (expression) dynamic_cast < new_type> (expression...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:从const_cast引出的一个问题
举报原因:
原因补充:

(最多只允许输入30个字)