关于c++ 强制转换类型运算符 static_cast、dynamic_cast、reinterpret_和const_cast
来源:互联网 发布:手机限制网速软件 编辑:程序博客网 时间:2024/04/29 08:47
转自http://blog.csdn.net/jacklam200/archive/2008/12/07/3469058.aspx
因为虽然很多有经验的C++程序员认为他们知道,但是他们还是不知道全部。(我也没有知道全部 )
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++ 强制转换类型运算符 static_cast、dynamic_cast、reinterpret_和const_cast
- 关于c++ 强制转换类型运算符 static_cast、dynamic_cast、reinterpret_和const_cast
- c++ 强制转换类型运算符 const_cast reinterpret_cast static_cast dynamic_cast
- [C++] 强制类型转换static_cast、dynamic_cast、reinterpret_cast和const_cast
- 【C++】强制类型转换(static_cast,reinterpret_cast,const_cast,dynamic_cast,explicit)
- c++dynamic_cast、const_cast 、static_cast、reinterpret_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
- 强制类型转换 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
- c++强制类型转换:dynamic_cast、const_cast 、static_cast
- 标准c++中四种强制转换类型运算符介绍 const_cast,reinterpret_cast,static_cast,dynamic_cast
- 标准c++中主要有四种强制转换类型运算符 const_cast,reinterpret_cast,static_cast,dynamic_cast
- C++强制类型转换符-dynamic_cast:static_cast:const_cast:reinterpret_cast
- 一种给TDBGrid和TLabel增加鼠标效果的简单方法。
- CIDR
- 半转载:获取网址测试
- RedHat9实现集群负载均衡系统LVS
- office2007在windows2008上安装失败的诡异原因(提示找不到文件)
- 关于c++ 强制转换类型运算符 static_cast、dynamic_cast、reinterpret_和const_cast
- 基金创新之困
- ACE的构建(VC++6.0环境)
- 家长徐少春
- 主页javascript特效19则
- 曲线救国,使枚举enum支持字符串string
- 工作第一天环境搭建工作
- 深入浅出谈CUDA
- TCP/IP协议