C++ 类型转换(Casting Operators)
来源:互联网 发布:javascript实现选项卡 编辑:程序博客网 时间:2024/05/01 21:06
转自:http://blog.csdn.net/leehong2005/article/details/8602030
在C++中,经常会涉及到类型转换,虽说一般情况下不建议类型转换,但有时候还是避免不了。转换的时候,可能一般都直接使用C语言风格的转换(直接强制转换),但这样做可能很不安全,容易造成数据丢失(如int -> char),内存访问违规。
1、static_cast
2、dynamic_cast
dynamic_cast必须用于有继承关系的类之间,如果两个类指针之间没有任何关系,则会报编译错误。
- // dynamic_cast_1.cpp
- // compile with: /c
- class B { };
- class C : public B { };
- class D : public C { };
- void f(D* pd) {
- C* pc = dynamic_cast<C*>(pd); // ok: C is a direct base class
- // pc points to C subobject of pd
- B* pb = dynamic_cast<B*>(pd); // ok: B is an indirect base class
- // pb points to B subobject of pd
- }
- void func(B *pb){
- D *pd1 = static_cast<D *>(pb);
- D *pd2 = dynamic_cast<D *>(pb);
- }
- class A
- {
- public:
- int m_iNum;
- virtual void f(){}
- };
- class B:public A{};
- class D:public A{};
- void foo()
- {
- B *pb = new B;
- pb->m_iNum = 100;
- D *pd1 = static_cast<D *>(pb); //copile error
- D *pd2 = dynamic_cast<D *>(pb); //pd2 is NULL
- delete pb;
- }
3、const_cast
- class B
- {
- public:
- int m_iNum;
- }
- void foo()
- {
- const B b1;
- b1.m_iNum = 100; //comile error
- B b2 = const_cast<B>(b1);
- b2. m_iNum = 200; //fine
- }
4、reinterpret_cast
- // expre_reinterpret_cast_Operator.cpp
- // compile with: /EHsc
- #include <iostream>
- // Returns a hash code based on an address
- unsigned short Hash( void *p ) {
- unsigned int val = reinterpret_cast<unsigned int>( p );
- return ( unsigned short )( val ^ (val >> 16));
- }
- using namespace std;
- int main() {
- int a[20];
- for ( int i = 0; i < 20; i++ )
- cout << Hash( a + i ) << endl;
- }
- C++ 类型转换(Casting Operators)
- C++ 类型转换(Casting Operators)
- C++ 类型转换(Casting Operators)
- C++—类型转换(Type Casting)
- C++--类型转换(Type Casting)
- [深入理解C++(一)]类型转换(Type Casting)
- [深入理解C++(一)]类型转换(Type Casting)
- [深入理解C++(一)]类型转换(Type Casting)
- [深入理解C++(一)]类型转换(Type Casting)
- C++类型转换(Type Casting)
- C++类型转换(Type Casting)
- 类型转换操作符(casting operator)
- C++的类型转换(Type Casting)
- C++类型转换(Type Casting)
- Swift 类型转换(Type Casting)
- [深入理解C++(一)]类型转换(Type Casting) .罗朝辉 (http://blog.csdn.net/kesalin)
- java3:类型转换(type casting)
- 类型转换二:Type casting
- 【昊昊带你学】DIY之SSD
- HTML表格细线设置
- hdu2586(How far away ?)
- Google Maps Android API V2的使用及问题解决
- 【昊昊带你学】神秘现象(提问帖)
- C++ 类型转换(Casting Operators)
- C++中引用(&)的用法和应用实例
- Makefiles in Linux: An Overview
- 【昊昊带你学】android-解决/data/dalvik-cache占用内存的问题
- 将来的手机,我心中的手机 【十年前的一篇随笔】
- 【昊昊带你学】VMWare+Mountain Lion
- Android学习系列(35)
- 第三次作业
- 这几天遇到的问题总结