C++类型转换详解

来源:互联网 发布:一个程序员的职业规划 编辑:程序博客网 时间:2024/06/02 03:49

类型转换的使用
隐式类型转换: 小 => 大 char => int
显式类型转换(强制类型转换): 大 => 小 int => char
如:
char c;
int i = c; //隐式类型转换
c = (char)i; // C风格的强制类型转换
c = char(i); // C++风格的强制类型转换

1.静态类型转换
目标类型 变量名 = static_cast<目标类型>源类型变量名
功能:
当目标类型和源类型之间只要有一个方向可以发生隐式类型转换,则在两个方向上都可以进行静态类型转换。否则不能进行类型转换

2.常量类型转换
目标类型 变量名 = const_cast<目标类型>源类型变量名
功能:
主要用于去除指针/引用上面的常属性 ;

3.重解释类型转换
volatile告诉编译器,该值是易变的,编译器不会单纯的到寄存器中取那些原本在寄存器中的数据,而是到内存空间中取数据。
目标类型 变量名 = reinterpret_cast<目标类型>(源类型变量名)
功能:
主要用于任意两个指针类型/指针和整型之间的转换;

4 动态类型转换
目标类型 变量名=dynamic_cast<目标类型>(源类型变量名)
功能:
主要用于具有多态特性的父子类之间的转换;
用于在多态继承结构中做向下造型,检查目标类型和实际对象类型是否一致,如果一致则进行转换,否则失败。如果所转换的是指针,则通过返回空指针
(必须在多态继承中进行检测,继承多态的虚表完成)
class A { virtual void foo (void) {} };
class B : public A {};
class C : public B {};
class D {};
int main (void) {
B b;
A* pa = &b; // 向上造型
cout << “pa = ” << pa << endl;
B* pb = dynamic_cast

0 0
原创粉丝点击