static_cast是一个强制类型转换操作符。强制类型转换,也称为显式转换,C++中强制类型转换操作符有static_cast、dynamic_cast、const_cast、reinterpert_cast四个。 编译器隐式执行的任何类型转换都可以由static_cast来完成,比如int与float、double与char、enum与int之间的转换等。 doublea =1.999;intb = static_cast...
进行上行转换(把派生类的指针或引用转换成基类表示)是安全的。 进行下行转换(把基类的指针或引用转换成派生类表示),由于没有动态类型检查,不安全。 用于基本数据类型之间的转换 把空指针转换成目标类型的空指针 把任何类型的表达式转换成void类型 2. dynamic_cast 用于将一个父类对象的指针/引用转换为子类对象的指针...
dynamic_cast依赖于RTTI信息,其次,在转换时,dynamic_cast会检查转换的source对象是否真的可以转换成target类型, 这种检查不是语法上的,而是真实情况的检查。先看RTTI相关部分,通常,许多编译器都是通过vtable找到对象的RTTI信息的,这也就意味着,如果基类没有虚方法,也就无法判断一个基类指针变量所指对象的真实类型,这时...
static_cast运算符将空指针值转换为目标类型的空指针值。 任何表达式都可以通过static_cast运算符显式转换为 void 类型。 目标 void 类型可以选择性地包含const、volatile或__unaligned特性。 static_cast运算符无法强制转换掉const、volatile或__unaligned特性。 有关移除这些特性的详细信息,请参阅const_cast Operator。
dynamic_cast是四个强制类型转换操作符中最特殊的一个,它支持运行时识别指针或引用。 首先,dynamic_cast依赖于RTTI信息,其次,在转换时,dynamic_cast会检查转换的source对象是否真的可以转换成target类型, 这种检查不是语法上的,而是真实情况的检查。 若对指针进行dynamic_cast,失败返回nullptr,成功返回正常cast后的对象...
C++中总共有四个强制类型转换操作符:reinterpert_cast、static_cast、const_cast、dynamic_cast。强制类型转换,也称为显式转换,接下来我们讲讲static_cast这个强制类型转换操作符。 编译器隐式执行的任何类型转换都可以由static_cast来完成,比如int与float、double与char、enum与int之间的转换等。
(1)用于基本数据类型之间的转换,如把int转换为char,把int转换成enum,但这种转换的安全性需要开发者自己保证(这可以理解为保证数据的精度,即程序员能不能保证自己想要的程序安全),如在把int转换为char时,如果char没有足够的比特位来存放int的值(int>127或int<-127时),那么static_cast所做的只是简单的截断,及简单...
《Effective C++》中将c语言强制类型转换称为旧式转型,c++强制类型转换称为新式转型。 2. C++强制转换: static_cast、dynamic_cast、const_cast、reinterpret_cast static_cast static_cast相当于传统的C语言里的强制转换,该运算符把expression转换为new_type类型,用来强迫隐式转换,例如non-const对象转为const对象,编译...
需要使用类型转换的地方都可以使用C语言风格的强制类型转换进行转换。正是因为这种万能性,C语言风格的...
static_cast是可以使用的最简单的类型转换。它是编译时强制转换。它可以在类型之间进行隐式转换(例如int到float,或指针到void*),它还可以调用显式转换函数(或隐式转换函数)。 const_cast用法示例 下面是static_cast的11个使用场景示例: 1. 用于原C风格的隐式类型转换 ...