linqy的个人博客分享 http://blog.sciencenet.cn/u/linqy

博文

const_cast的用法及示例

已有 3721 次阅读 2017-7-12 15:04 |个人分类:C++|系统分类:科研笔记

const_cast,用于修改类型的const或volatile属性。

用    法:    const_cast<type_id>

const_cast<type_id> (expression)
该运算符用来修改类型的const或volatile属性。除了const 或volatile修饰之外, type_id和expression的类型是一样的。
1、常量指针被转化成非常量的指针,并且仍然指向原来的对象;
2、常量引用被转换成非常量的引用,并且仍然指向原来的对象;
3、const_cast一般用于修改底指针。如const char *p形式。

作    用:    修改类型的const或volatile属性

示例:

volatile和const类似。举如下一例:
   
class B
{
public:
   B() { }
public:
   int m_iNum;
};
void foo()
{
  const B b1;
   //b1.m_iNum = 100; //compile error
   // 可以做如下转换,体现出转换为指针类型
   B *b2 = const_cast<B*>(&b1);
   // 或者左侧也可以用引用类型,如果对b2或b3的数据成员做改变,就是对b1的值在做改变
  B &b3 = const_cast<B&>(b1);
   b2->m_iNum = 200;    //fine
   b3.m_iNum = 300;    //fine
}
int main( int argc, char * argv[] )
{
   foo();
   return 0;
}
上面代码可运行,不会报错,错误代码已经注释 。去掉下面代码行的注释号后会报错,因为b1之不可修改。
//b1.m_iNum = 100; //compile error  
使用const_cast可以返回一个指向非常量的指针(或引用)指向b1,就可以通过该指针(或引用)对它的数据成员任意改变。











https://wap.sciencenet.cn/blog-3134052-1065924.html

上一篇:PostgreSQL下载与安装使用
下一篇:Oracle安装时,出现的Environment variable:"path" 失败问题
收藏 IP: 124.207.244.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-6-1 16:54

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部