C++的显示转换


静态转换(static_cast)

static_cast全部用于明确定义的变换,包括编译器允许我们所做的不用强制转换的“安全”变换和不太安全

但是清楚定义的变换,static_cast包含的转换类型包括典型的非强制变换,窄化(有信息丢失)变换,使用void*的强制变换,隐式类型变换和类层次的静态定位。

例如:

  1. #include<iostream>   
  2. using namespace std;  
  3. int fun(int x){}  
  4. int main()  
  5. {  
  6.     int i=0x7fff;  
  7.     long l;float f;  
  8.     //将int提升到long,float是不会有问题的   
  9.     l=i;f=i;  
  10.     l=static_cast<long>(i);  
  11.     f=static_cast<float>(i);  
  12.     //窄化变换,可能会造成信息的丢失   
  13.     i=l;i=f;  
  14.     char c=static_cast<char>(i);  
  15.     void* p=&i;  
  16.     float* fp=(float*)p;  
  17.     fp=static_cast<float*>(p);  
  18.     double d=0.0;  
  19.     int x=d;  
  20.     x=static_cast<int>(d);  
  21.     fun(d);  
  22.     fun(static_cast<int>(d));  
  23.     return 0;  
  24. }  

常量转换(const_cast)

如果从const转换为非const或从volatile转换为非volatile,可以使用const_cast。这是const_cast唯一

允许的转换,如果进行别的转换就可能要使用单独的表达式或者可能会得到一个编译错误。

如果取得了const对象的地址,就可以生成一个指向const的指针,不用转换时不能将它赋给非

const指针的。

  1. #include<iostream>   
  2. using namespace std;  
  3. int main()  
  4. {  
  5.     const int i=0;  
  6.     int* j=(int*)&i;  
  7.     j=const_cast<int*>(&i);  
  8.     volatile int k=0;  
  9.     int* u=const_cast<int*>(&k);  
  10.     return 0;  
  11. }  
  • 1
  • 2
  • 下一页

相关内容