直白的说,static_cast操作符可用于将一个指向基类的指针转换为指向子类的指针。但是这样的转换不总是安全的。 一般情况下,你可以使用static_cast用于数字类型的转换,如把枚举转换为int或是 float类型。 之所以讲static_cast不够安全,就是指在运行阶段不进行类型检查(和dynamic_cast相比,但是dynamic_cast也有一定的局限...
static_cast和dynamic_cast可以执行指针到指针的转换,或实例本身到实例本身的转换,但不能在实例和指针之间转换。static_cast只能提供编译时的类型安全,而dynamic_cast可以提供运行时类型安全。举个例子: class a;class b:a;class c。 上面三个类a是基类,b继承a,c和ab没有关系。 有一个函数void function(a&a);...
然后function(static_cast(ref_b))就通过了!因为从编译器的角度来看,在编译时并不能知道ref_b实际上是c! 而function(dynamic_cast(ref_b))编译时也能过,但在运行时就失败了,因为dynamic_cast在运行时检查了ref_b的实际类型,这样怎么也骗不过去了。 在应用多态编程时,当我们无法确定传过来的对象的实际类型时...
即dynamic_cast 可用于继承体系中的向下转型,即将基类指针转换为派生类指针,比static_cast更严格更安全。dynamic_cast在执行效率上比 static_cast要差一些,但static_cast在更宽上范围内可以完成映射,这种不加限制的映射伴随着不安全性。static_cast覆盖 的变换类型除类层次的静态导航以外,还包括无映射变换、窄化变换(...
typedef void (*FuncPtr)(); void someFunction() {} FuncPtr funcPtr = reinterpret_cast<FuncPtr>(&someFunction); 3. const_cast 常量转换 const_cast 是C++中用来移除变量的 const 性质的类型转换操作符。它的典型用途包括: 1. 在有const 和非const版本的重载函数中进行转换。 2. 当你需要向一个只...
function(val_static); std::cout << val_static << std::endl; } // Segmentation fault 二师兄:reinterpret_cast可以将指针或引用转换为任何类型的指针或引用。reinterpret_cast实现依赖于编译器和硬件,可能导致未定义的行为。 #include <iostream>
function(val_static);std::cout<< val_static <<std::endl; }// Segmentation fault 二师兄:reinterpret_cast可以将指针或引用转换为任何类型的指针或引用。reinterpret_cast实现依赖于编译器和硬件,可能导致未定义的行为。 #include<iostream>intmain(intargc,charconst*argv[]){inti =42;doubled =42.0;long*...
function(val_static); std::cout << val_static << std::endl; } // Segmentation fault 二师兄:reinterpret_cast可以将指针或引用转换为任何类型的指针或引用。reinterpret_cast实现依赖于编译器和硬件,可能导致未定义的行为。 #include <iostream>
1) C 风格(C-style)强制转型: (T) exdivssion // cast exdivssion to be of type T 2) 函数风格(Function-style)强制转型使用这样的语法: T(exdivssion) // cast exdivssion to be of type T 上面两种形式之间没有本质上的不同,它纯粹就是一个把括号放在哪的问题,我们把这两种形式称为旧风格(old...
static_cast C 风格(C-style)强制转型例如以下: (T) exdivssion // cast exdivssion to be of type T 函数风格(Function-style)强制转型使用这种语法: T(exdivssion) // cast exdivssion to be of type T 这两种形式之间没有本质上的不同,它纯粹就是一个把括号放在哪的问题。我把这两种形式称为旧...