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++

下一篇: Virtual functions and cast to void and back