我是C ++的新手。目前我正在查看源代码,我看到了一些类型转换,但我不明白 这是代码。
struct str {
char *a;
int b;
};
class F {
public:
char* val;
};
F f1;
任何人都可以解释下面的Assignement Please.or是类型转换有效吗?
str* ptr = (str*) f1->val;
答案 0 :(得分:3)
任何人都可以解释下面的Assignement Please。
这意味着“假装val
指针指向str
类型的对象,即使它被声明指向完全不同的类型char
;给我指针和信任我知道我在做什么“。
假设真实代码声明F * f1;
或将其作为f1.val
访问;您发布的代码将无法编译。
还是那种类型转换有效?
如果指针确实指向了正确类型的对象,那么它是有效的;否则,使用指针将导致程序以各种灾难性方式失败。
Typecasting是很少需要的东西。如果你确实需要它,你绝不应该(在任何情况下绝对不会)使用那种C风格的演员表;它意味着“只要有一些方法可以做到,就可以强制转换而不进行任何检查,即使它完全没有意义”。尽可能使用static_cast
或dynamic_cast
,当您做一些非常狡猾的事情时,请reinterpret_cast
或const_cast
。除非你知道自己在做什么,否则不要使用任何一个,并且有充分的理由来规避类型系统。