long n=static_cast<long>(m);//宽转换,没有信息丢失 char ch=static_cast<char>(m);//窄转换,可能会丢失信息 int*p1=static_cast<int*>(malloc(10*sizeof(int)));//将void指针转换为具体类型指针 void*p2=static_cast<void*>(p1);//将具体类型指针,转换为void指针 double real=static_cast<double...
对于基类的指针或者引用向派生类的指针或者引用转换(down cast)的时候dynamic_cast提供动态类型检查,当转换失败的时候可以通过返回空指针或者抛出异常的方式来告知调用者(caller)转换失败了,而static_cast则不会进行动态检查,其像C语言中的强制类型转换一样,默认为可以转换,并且返回强制转换之后的指针或者引用,如果参与转...
所以,当我们用static_cast将父类指针转换成子类指针时,编译器不报错。而dynamic_cast是在运行时执行类型转换,用于将基类的指针安全地转换成派生类的指针,也就是说,dynamic_cast会进行动态类型检查。dynamic_cast相当于给程序员提供了一种安全的机制,让程序员能够安全地使用父类指针的动态类型。 下面举一个使用dynamic...
static_cast < type-id > ( expression ),该运算符把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性 它主要有如下几种用法: (1)用于基本数据类型之间的转换,如把int转换为char,把int转换成enum,但这种转换的安全性需要开发者自己保证(这可以理解为保证数据的精度,即程序员能不能保证自己...
1. static_cast 实现C++种内置基本数据类型之间的相互转换,不能用于两个不相关类型进行转换。 例如:将整形数据转换为浮点型 c语言方式 int a = 8; int b = 3; double result = (double)a / (double)b; 1. 2. 3. C++方式 int a = 8;
1. static_cast<void*>()静态转换 static_cast和 reinterpret_cast的几种使用场景 2. reinterpret_cast<void *>()重新解释转换 A:指针与整数之间的转换: B:指针之间的转换 C:不相关类型的指针之间的转换 D:函数指针之间的转换: 3. const_cast 常量转换 4. dynamic_cast 动态转换 5. 重点-深入理解下reinter...
在标准C++中有四个类型转换符:static_cast、dynamic_cast、const_cast和reinterpret_cast;下面将对它们一一的进行总结。 1. static_cast static_cast的转换格式:static_cast <type-id> (expression) 将expression转换为type-id类型,主要用于非多态类型之间的转换,不提供运行时的检查来确保转换的安全性。主要在以下几...
static_cast: 用于编译时已知类型的转换,如基本数据类型转换、派生类到基类的转换、指针和引用的转换等。 不能用于去除 const 属性或进行多态类型的向下转换。 dynamic_cast: 用于运行时类型检查的转换,主要用于多态类的向下转换,即从基类指针或引用安全地转换到派生类指针或引用。
被称为“强制类型转换”(cast) C 风格: (type-id) C++风格: static_cast、dynamic_cast、reinterpret_cast、和const_cast.. 关于强制类型转换的问题,很多书都讨论过,写的最详细的是C++ 之父的《C++ 的设计和演化》。最好的解决方法就是不要使用C风格的强制类型转换,而是使用标准C++的类型转换符:static_cast,...