函数glfwSetWindowUserPointer的参数是void*类型的指针,可以通过函数glfwGetWindowUserPointer获取这个指针,获取到的指针类型也是void*,但我们已经知道它必然是一个App*类型的指针,此时可以使用reinterpret_cast将其转换回来: 复制代码 void* ptr =glfwGetWindowUserPointer(); App* app1 =reinterpret_cast<App*>(ptr); ...
static_cast 运算符可用于将指向基类的指针转换为指向派生类的指针等操作。 此类转换并非始终安全。通常使用 static_cast 转换数值数据类型,例如将枚举型转换为整型或将整型转换为浮点型,而且你能确定参与转换的数据类型。 static_cast 转换安全性不如 dynamic_cast 转换,因为 static_cast 不执行运行时类型检查,而 ...
一. static_cast static_cast基于内容转换,相对安全。 1.普通用法 inti=2;floatf=static_cast<float>(i);//类似float f=(float)(i); 2.void* 转换 任何指针都能隐式转换为void*,然而,要对void*指向的对象进行操作,必须先将void*转换为具体类型的指针,而且必须是显式转换,不允许隐式转换。例如: ...
对于static_cast,上行转换时安全的,而下行转换时不安全的 因为static_cast的转换时粗暴的,它仅根据类型转换语句中提供的信息(尖括号中的类型)来进行转换,这种转换方式对于上行转换,由于子类总是包含父类的所有数据成员和函数成员,因此从子类转换到父类的指针对象可以没有任何顾虑的访问其(指父类)的成员。 而对于下行...
/*B 要有虚函数,否则会编译出错;static_cast则没有这个限制。 这是由于运行时类型检查需要运行时类型信息,而这个信息存储在类的虚函数表中, 只有定义了虚函数的类才有虚函数表,没有定义虚函数的类是没有虚函数表的。*/classB {public:intnum;virtualvoidfun(); ...
p2.y=static_cast<float>(p1.b);// 明确转换int为float C:判断一个类型是否为平凡类型 这块有两个标准库函数可以判断 std::is_trivial:判断类型是否是平凡类型,主要关注构造、析构和赋值操作是否是平凡的。 std::is_trivially_copyable:判断类型是否是可平凡复制的类型,确保类型可以通过简单的内存拷贝进行复制...
reinpreter_cast 用法:reinpreter_cast<type-id> (expression_r_r) type-id必须是一个指针、引用、算术类型、函数指针或者成员指针。它可以把一个指针转换成一个整数,也可以把一个整数转换成一个指针(先把一个指针转换成一个整数,在把该整数转换成原类型的指针,还可以得到原先的指针值)。
static_cast 构造函数 static_cast是C++中的一种类型转换操作符,它用于进行静态类型转换。在C++中,static_cast可以用于执行各种类型之间的转换,包括基本数据类型、指针类型和引用类型等。然而,static_cast并不会执行运行时类型检查,因此在进行类型转换时需要确保转换是安全的。 当涉及到构造函数时,static_cast并不直接...
static_cast是可以使用的最简单的类型转换。它是编译时强制转换。它可以在类型之间进行隐式转换(例如int到float,或指针到void*),它还可以调用显式转换函数(或隐式转换函数)。 const_cast用法示例 下面是static_cast的11个使用场景示例: 1. 用于原C风格的隐式类型转换 ...
在标准C++中有四个类型转换符:static_cast、dynamic_cast、const_cast和reinterpret_cast;下面将对它们一一的进行总结。 1. static_cast static_cast的转换格式:static_cast <type-id> (expression) 将expression转换为type-id类型,主要用于非多态类型之间的转换,不提供运行时的检查来确保转换的安全性。主要在以下几...