C++主题——转型
2007-04-11 09:43
211 查看
C++主题——转型
C++ Style Cast的优势:
1.那么长,又那么怪,容易被发现出来;
2.错误容易被编译器找到,他们的功能比较明确。
四种转型操作的职能:
1.const_cast
只允许添加或移除表达式或类型的const、volatile修饰符。它将告诉编译器,它所进行的操作仅仅是与const相关操作的添加或移除。当代码在以后改变的时候,它会在编译器跳出来报告问题,而C Style Cast仍然当成没事人似的继续工作。
2.static_cast
用于相对可跨平台的转型操作,如类层次中,基类的指针或者引用,向下转型成为派生类的指针或引用。
3.reinterpret_cast
从bit的角度来看待一个对象,从而允许将一个对象看作是另一个对象,如int 到double,int*到char*等。
它不具备可移植性,因为将一个对象转换程另一个对象的操作并非只是让编译器对那块内存的解析方法不同,那是根据平台的特性而决定的。
4.dynamic_cast
也是在集成体系下的转型,但是不同与static转型,它是对多态类型的向下转型操作,它所操作的类型,必须是含有虚函数的类型的指针。
它执行runtime的检查操作,来判定转型的正确性,所以它比较耗费资源,如果转型失败,那么将抛出一个异常,std::bad_cast,可以利用这个异常的性质进行“能力查询”。
注意:
对于应用程序框架,常常有在子虚函数中调用父类虚函数的情况,这时不应该用转型操作符,因为这时,static_cast<base>(*this).virtual_function();它所调用的是base的虚函数,但是不是this本身,而是this的一个copy,这样不能达到子类调用父类的目的,这样做是可以的:base::virtual_function();
应该尽量避免转型~
C++ Style Cast的优势:
1.那么长,又那么怪,容易被发现出来;
2.错误容易被编译器找到,他们的功能比较明确。
四种转型操作的职能:
1.const_cast
只允许添加或移除表达式或类型的const、volatile修饰符。它将告诉编译器,它所进行的操作仅仅是与const相关操作的添加或移除。当代码在以后改变的时候,它会在编译器跳出来报告问题,而C Style Cast仍然当成没事人似的继续工作。
2.static_cast
用于相对可跨平台的转型操作,如类层次中,基类的指针或者引用,向下转型成为派生类的指针或引用。
3.reinterpret_cast
从bit的角度来看待一个对象,从而允许将一个对象看作是另一个对象,如int 到double,int*到char*等。
它不具备可移植性,因为将一个对象转换程另一个对象的操作并非只是让编译器对那块内存的解析方法不同,那是根据平台的特性而决定的。
4.dynamic_cast
也是在集成体系下的转型,但是不同与static转型,它是对多态类型的向下转型操作,它所操作的类型,必须是含有虚函数的类型的指针。
它执行runtime的检查操作,来判定转型的正确性,所以它比较耗费资源,如果转型失败,那么将抛出一个异常,std::bad_cast,可以利用这个异常的性质进行“能力查询”。
注意:
对于应用程序框架,常常有在子虚函数中调用父类虚函数的情况,这时不应该用转型操作符,因为这时,static_cast<base>(*this).virtual_function();它所调用的是base的虚函数,但是不是this本身,而是this的一个copy,这样不能达到子类调用父类的目的,这样做是可以的:base::virtual_function();
应该尽量避免转型~
相关文章推荐
- C++主题年技巧积累#2——我被static撞了一下腰
- C++主题年技巧积累#2——我被static撞了一下腰
- C++主题年技巧积累#1——UltraEdit的代码美化
- C++主题年技巧积累#1——UltraEdit的代码美化
- C++箴言:将强制转型减到最少
- 【M2】最好使用C++转型操作符
- c++的字符串char与string相互转化,以及string的,切割,替换字符,字符串拼接方法(object向c++转型系列教程2)
- 职场二年级转型C++的困惑
- C++主题年技巧积累#1——UltraEdit的代码美化
- C++初级主题--(5)拷贝构造函数
- C++初级主题--(6)赋值函数
- C++转型操作符:const_cast、dynamic_cast、static_cast、reinterpret_cast
- C++新式转型之const_cast
- Android 培训计划:如何从功能机时代的 C/C++ 工程师转型至 Android 工程师
- C++转型
- c++强制转型
- ubuntu 安装 eclipse CDT 配置 sublime c++ 主题
- C++主题——转换函数
- C++主题——成员初始化列表
- C++主题年技巧积累#2——我被static撞了一下腰