4种不同类型的数据类型可以在c ++中采用(或通常采用)
看来static_cast可以取值,引用或指针 ,并将它们转换为另一种类型的值,引用或指针。 但是,似乎dynamic_cast,reinterpret_cast和const_cast只能带参考和指针 。
我知道对于cont_cast,它只采用指针或引用,而不是变量,这是未定义的行为。 不知道为什么dynamic_cast和reinterpret_cast只能引用和指针,以及如果对值类型使用dynamic_cast和reinterpret_cast会发生什么。
例如,static_cast可以采取指针 :
B* pb; D* pd;
pointer:D* pd2 = static_cast<D*>(pb); // Not safe, D can have fields and methods that are not in B.
对于另一个实例,假设dynamic_cast和reinterpret_cast具有值类型:
int B; char D;
B = dynamic_cast<B>(D);
int B; char D;
B = reinterpret_cast<B>(D);
会发生什么,为什么我们不应该这样做?
但是,static_cast将指针作为输入是不安全的
静态转换的重点在于它使用编译时信息来确定转换是否安全。 所以你当然可以使用static_cast转换指针:
struct A {};
struct B : A {};
int main() {
B * bp = nullptr;
A * ap = static_cast <A*> (bp); // OK
char * cp = static_cast <char*> (bp); // error
}
链接地址: http://www.djcxy.com/p/28763.html
上一篇: The data types the 4 different casts can take (or normally take) in c++