时间:2021-05-19
什么是类型转换?
类型转换的含义是通过改变一个变量的类型为别的类型从而改变该变量的表示方式。为了类型转换一个简单对象为另一个对象你会使用传统的类型转换操作符。
C与C++的类型转换
C中:
复制代码 代码如下:
(T)element 或者 T(element)
c++中:
复制代码 代码如下:
reinterpret_cast<T*> (expression)
dynamic_cast<T*> (expression)
static_cast<T*> (expression)
const_cast<T*> (expression)
C++的四种强制转型形式每一种适用于特定的目的:
·dynamic_cast 主要用于执行“安全的向下转型(safe downcasting)”,也就是说,要确定一个对象是否是一个继承体系中的一个特定类型。它是唯一不能用旧风格语法执行的强制转型,也是唯一可能有重大运行时代价的强制转型。
·static_cast 可以被用于强制隐型转换(例如,non-const 对象转型为 const 对象,int 转型为 double,等等),它还可以用于很多这样的转换的反向转换(例如,void* 指针转型为有类型指针,基类指针转型为派生类指针),但是它不能将一个 const 对象转型为 non-const 对象(只有 const_cast 能做到),它最接近于C-style的转换。
·const_cast 一般用于强制消除对象的常量性。它是唯一能做到这一点的 C++ 风格的强制转型。
·reinterpret_cast 是特意用于底层的强制转型,导致实现依赖(implementation-dependent)(就是说,不可移植)的结果,例如,将一个指针转型为一个整数。这样的强制转型在底层代码以外应该极为罕见。
通俗的解释:
dynamic_cast通常在基类和派生类之间转换时使用static_cast 一般的转换,如果你不知道该用哪个,就用这const_cast主要针对const和volatile的转换reinterpret_cast用于进行没有任何关联之间的转换,比如一个字符指针转换为一个整形数具体分析:
1)static_cast<T*>(a)编译器在编译期处理
2)dynamic_cast<T*>(a)在运行期,会检查这个转换是否可能
复制代码 代码如下:
class Base { virtual dummy() {} };
class Derived : public Base {};
Base* b1 = new Derived;
Base* b2 = new Base;
Derived* d1 = dynamic_cast<Derived *>(b1); // succeeds
Derived* d2 = dynamic_cast<Derived *>(b2); // fails: returns 'NULL'
3)const_cast<T*>(a)编译器在编译期处理
复制代码 代码如下:
class A { ... };
void f()
{
const A *pa = new A;//const对象
A *pb;//非const对象
//pb = pa; // 这里将出错,不能将const对象指针赋值给非const对象
pb = const_cast<A*>(pa); // 现在OK了
...
}
const char* p = "123";
char* c = const_cast<char*>(p);
c[0] = 1; //表面上通过编译去掉了const性,但是操作其地址时系统依然不允许这么做。
4)reinterpret_cast<T*>(a)编译器在编译期处理
复制代码 代码如下:
class A { ... };
class B { ... };
void f()
{
A* pa = new A;
void* pv = reinterpret_cast<A*>(pa);
// pv 现在指向了一个类型为B的对象,这可能是不安全的
...
}
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
C++的类型转换详细介绍1、类型转换名称和语法C风格的强制类型转换(TypeCast)很简单,不管什么类型的转换统统是:TYPEb=(TYPE)aC++风格的类
C风格的强制类型转换(TypeCast)很简单,不管什么类型的转换统统是:TYPEb=(TYPE)a。C++风格的类型转换提供了4种类型转换操作符来应对不同场合
c++中提供了四种新的强制转换分别是:const_cast、dynamic_cast、reinterpret_cast、static_cast.这四种转换类型,
C++中字符串操作--宽窄字符转换的实例详解MultiByteToWideCharintMultiByteToWideChar(_In_UINTCodePage
C++中构造函数的实例详解c++构造函数的知识在各种c++教材上已有介绍,不过初学者往往不太注意观察和总结其中各种构造函数的特点和用法,故在此我根据自己的c++