设为首页 加入收藏

TOP

c++ 强制转换类型运算符
2011-04-05 21:31:04 来源: 作者: 【 】 浏览:876
Tags:强制 转换 类型 运算

因为虽然很多有经验的C++(www.cppentry.com)程序员认为他们知道,但是他们还是不知道全部。(我也没有知道全部  )

1.const_cast。
你知道,一个int*是可以直接赋给一个const int*的,但是一个const int*是不可以直接赋给一个int*的。这就需要:
int* pi=const_cast<int*>pci;

EG:

const A *pa = new A;//const对象   
A *pb;//非const对象   
//pb = pa; // 这里将出错,不能将const对象指针赋值给非const对象   
pb = const_cast<A*>(pa);// 现在OK了  


他还可以把volatile和对齐特性(alignment)去掉。
2.reinterpret_cast
就是:把整型(广义的)转换为指针,把指针转换为整型(广义的),把指针转换为另一个类型的指针。

A* pa = new A;   
void* pv = reinterpret_cast<A*>(pa);   
3.static_cast
可以做任何显式的自动转换(implicit cast),也可以做那些自动转换的逆转换,但是不能消除const,volatile和对齐。

表达式static_cast<T*>(a), a的值转换为模板中指定的类型T。在运行时转换过程中,不进行类型检查来确保转换的安全性。  

 

class B { ... };   
  
class D : public B { ... };   
  
void f(B* pb, D* pd)   
  
{   
  
     D* pd2 = static_cast<D*>(pb);          // 不安全, pb可能只是B的指针   
  
  
  
  
     B* pb2 = static_cast<B*>(pd);          // 安全的  

}

 

 


4.dynamic_cast
就是根据类型信息来cast。理解起来很简单,实际做起来代价不小。

表达式dynamic_cast<T*>(a) 将a值转换为类型为T的对象指针。如果类型T不是a的某个基类型,该操作将返回一个空指针。 

A* pa = new A;   
  
    B* pb = new B;   
  
    void* pv = dynamic_cast<A*>(pa);   
  
    // pv 现在指向了一个类型为A的对象   
  
    ...   
  
    pv = dynamic_cast<B*>(pb);   
  
    // pv 现在指向了一个类型为B的对象  

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C++ 分割string的一个简单方法 下一篇智能指针

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: