c++4种类型转换
2012-12-01 21:07
253 查看
c++类型转换:const_cast static_cast dynamic_cast reinterpret_cast
const_cast
用途:将const型转化为非const型,但一般转到引用,否则也没意义。但是有些有趣的现象:
const float f=1.5;
float& t=const_cast<float&>(f);
t=2;
//f=3; 编译错误,说明f仍然为const类型。
cout<<t<<"\t"<<f<<endl;
cout<<&t<<"\t"<<&f<<endl;
输出:
2 1.5
0xbf92d698 0xbf92d698
static_cast 静态类型转化。
c++隐式类型转化就是静态类型转化,所以这个操作符没有使用的必要。
静态类型转化后数据的二进制会根据类型的不同进行变化,例如四舍五入,eg float f=1.2 ; int n=f;
虽然都是4个字节,但二进制数不同。
reinterpret_cast 重解释转化
他对变量的二进制不做改变,只是对类型重解释,但只用在指针和引用上(足以)。
现在有如下代码,通过以二进制打印变量,比较static_cast 和reinterpret_cast的不同。
运行结果为:
00000000 00000000 00000000 00000001
00111111 11000000 00000000 00000000
dynamic_cast 用于多态的,再熟悉不过了。
const_cast
用途:将const型转化为非const型,但一般转到引用,否则也没意义。但是有些有趣的现象:
const float f=1.5;
float& t=const_cast<float&>(f);
t=2;
//f=3; 编译错误,说明f仍然为const类型。
cout<<t<<"\t"<<f<<endl;
cout<<&t<<"\t"<<&f<<endl;
输出:
2 1.5
0xbf92d698 0xbf92d698
static_cast 静态类型转化。
c++隐式类型转化就是静态类型转化,所以这个操作符没有使用的必要。
静态类型转化后数据的二进制会根据类型的不同进行变化,例如四舍五入,eg float f=1.2 ; int n=f;
虽然都是4个字节,但二进制数不同。
reinterpret_cast 重解释转化
他对变量的二进制不做改变,只是对类型重解释,但只用在指针和引用上(足以)。
现在有如下代码,通过以二进制打印变量,比较static_cast 和reinterpret_cast的不同。
#include <iostream> using namespace std; //以二进制打印变量,T只能是一种整形。 template<class T> void printBit(T& t) { int n=sizeof(T)*8; int j=0; for(int i=n-1;i>=0;i--) { if( ( (t>>i)&1 )==0) cout<<"0"; else cout<<"1"; if((++j)%8==0) cout<<" "; } cout<<endl; } int main() { float f=1.5 int n=f; printBit(n); int& pm=reinterpret_cast<int&>(f); printBit(pm); }
运行结果为:
00000000 00000000 00000000 00000001
00111111 11000000 00000000 00000000
dynamic_cast 用于多态的,再熟悉不过了。
相关文章推荐
- 比较C++中的4种类型转换方式
- [C++]中4种‘类型转换’方式
- c++ 4种类型转换
- C++中,有哪4种与类型转换相关的关键字?各有什么特点?应该在什么场合下使用?
- C++面试之__C++4种转换类型
- C++的4种类型转换关键字及其特点
- C++中4种类型转换方式 cast操作详解
- C++中4种类型转换
- C++的4种类型转换
- C++中的4种显示类型转换
- C++中的4种显示类型转换
- 比较C++中的4种类型转换方式
- C++中的4种显示类型转换(草稿)
- C++的4种类型转换关键字及其特点
- C++的4种类型转换关键字及其特点
- 比较C++中的4种类型转换方式(转自http://blog.csdn.net/hrbeuwhw/article/details/7884797)
- C++中的4种类型转换方式 cast操作
- C++中的4种类型转换方式
- C++中的4种类型转换方式
- c++中4种与类型转换相关的关键字(P23)