TypeCasting Struct和Classes

时间:2012-09-19 22:43:46

标签: c++ class casting

我是C ++的新手。目前我正在查看源代码,我看到了一些类型转换,但我不明白 这是代码。

struct str {
    char *a;
    int b;
};

class F {
public:
    char* val;
};  

F f1;  

任何人都可以解释下面的Assignement Please.or是类型转换有效吗?

 str* ptr = (str*) f1->val;  

1 个答案:

答案 0 :(得分:3)

  

任何人都可以解释下面的Assignement Please。

这意味着“假装val指针指向str类型的对象,即使它被声明指向完全不同的类型char;给我指针和信任我知道我在做什么“。

假设真实代码声明F * f1;或将其作为f1.val访问;您发布的代码将无法编译。

  

还是那种类型转换有效?

如果指针确实指向了正确类型的对象,那么它是有效的;否则,使用指针将导致程序以各种灾难性方式失败。

Typecasting是很少需要的东西。如果你确实需要它,你绝不应该(在任何情况下绝对不会)使用那种C风格的演员表;它意味着“只要有一些方法可以做到,就可以强制转换而不进行任何检查,即使它完全没有意义”。尽可能使用static_castdynamic_cast,当您做一些非常狡猾的事情时,请reinterpret_castconst_cast。除非你知道自己在做什么,否则不要使用任何一个,并且有充分的理由来规避类型系统。