码迷,mamicode.com
首页 > 其他好文 > 详细

类型转换

时间:2017-08-04 15:15:51      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:int   移除   express   pre   隐式   体系   out   指针类型   cas   

1.旧式转型

  • C风格:(T) expression
  • 函数风格:T (expression)

2.C++新式转型

  • const_cast<T>(expression)

      将对象的常量性移除。

const int constant=20;
const int *p=&constant;
int *value=const_cast<int *>(p);
*value=10;
cout<<constant<<" "<<*p<<" "<<*value<<endl<<&constant<<" "<<p<<" "<<value<<endl;//20,10,10,但是地址一样,应该是编译器优化导致。
  • dynamic_cast<T>(expression)

      执行“安全向下转型”,决定某对象是否归属于继承体系中的某个类型。

classB
{
    public:
    int m_iNum;
    virtual void foo();
};
classD:publicB
{
    public:
    char* m_szName[100];
};
void func(B* pb)
{
    D* pd1=static_cast<D*>(pb);
    D* pd2=dynamic_cast<D*>(pb);
}
  • reinterpret_cast<T>(expression)

      任意指针类型转换。

class A { ... };  
class B { ... };  
void f()  
{  
    A* pa = new A;  
    void* pv = reinterpret_cast<B*>(pa);  
    // pv 现在指向了一个类型为B的对象,这可能是不安全的  
    ...  
}
  • static_cast<T>(expression)

      强迫隐式转换。non-const->const,int->double,基类->派生类,无法将const->non-const

int i;
float f = 166.71;
i = static_cast<int>(f);//166

 

类型转换

标签:int   移除   express   pre   隐式   体系   out   指针类型   cas   

原文地址:http://www.cnblogs.com/loki1412/p/7285047.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!