C++ this与const,const_cast,static_cast的关系
来源:互联网 发布:淘宝采集软件合法吗 编辑:程序博客网 时间:2024/05/22 12:08
一、整体代码
#include <iostream>using namespace std;class CCTest {public: void setNumber( int ); void printNumber() const ;private: int number;};void CCTest::setNumber( int num ) { number = num; }void CCTest::printNumber() const { cout << "\nBefore: " << number; const_cast< CCTest * >( this )->number--; cout << "\nAfter:" << number;}int main() { CCTest X; X.setNumber( 8 ); X.printNumber(); cout << "\n" <<endl;}
二、运行结果如下:
三、解释
如果方法声明为const,那么实现的时候一定要加上const。
在const方法中this 指针的数据类型为 const CCTest *,只能调用const的方法和成员变量。
如果想调用非const的方法和成员变量,那么就要const_cast< CCTest * >( this ),其中this类型为const CCTest* ,改变后为CCTest*,就可以使用非const的方法和成员变量了。
在非const方法中this指针的数据类型为CCTest *可以调用所有的方法和成员变量。如果一个方法同时有const和非const版本,优先调用非const版本。
四、static_const
RefBase* RefBase::weakref_type::refBase() const{ return static_cast<const weakref_impl*>(this)->mBase;}
如果在const方法中,由于this为const RefBase::weakref_type类型,转换为子类const RefBase::weak_impl类型。
RefBase* RefBase::weakref_type::refBase() { return static_cast<weakref_impl*>(this)->mBase;}如果没在const方法中,由于this为RefBase::weakref_type类型,转换为子类RefBase::weak_impl类型。
0 0
- C++ this与const,const_cast,static_cast的关系
- static_cast,dynamic_cast,reinterpret_cast const_cast于c语言cast的区别
- static_cast、dynamic_cast、reinterpret_cast和const_cast的区别与比较
- static_cast、dynamic_cast、reinterpret_cast和const_cast的区别与比较
- static_cast、dynamic_cast、reinterpret_cast和const_cast的区别与比较
- static_cast、dynamic_cast、reinterpret_cast和const_cast之间的区别,char int *p,int const*p
- bad_cast,const_cast,dynamic_cast,reinterpret_cast,static_cast(C++)
- 【C++】static_cast, dynamic_cast, reinterpret_cast, const_cast区别比较
- [C++]const_cast,dynamic_cast,reinterpret_cast,static_cast转型
- <C++> dynamic_cast、const_cast、static_cast、reinterpret_cast总结
- const_cast & static_cast
- static_cast,const_cast
- static_cast/const_cast
- static_cast,dynamic_cast,reinterpret_cast,const_cast的使用
- static_cast,const_cast,dynamic_cast,reinterpret_cast的用法
- static_cast, dynamic_cast, reinpreter_cast, const_cast的用法
- static_cast、dynamic_cast、const_cast和reinterpret_cast的区别
- static_cast, dynamic_cast, reinterpret_cast, const_cast的区别
- 有人说,每个人都有一颗漂泊的心。
- linux 串口概述
- linux无线命令wpa
- Sprite Kit 物理引擎初体验(一)代码展示
- android图片加载动画
- C++ this与const,const_cast,static_cast的关系
- quartz 的job中获取到applicationContext
- 十四周——动物这样叫
- 脚本语言(Script language,scripting language,scripting programming language)是为了缩短传统的编写-编译-链接-运行(edit-comp
- SVN 指令
- vc 获取网卡比较
- Jmockit使用指南
- 搜索引擎公司百度
- Vim快速选中、删除、复制引号或括号中的内容