私はC++に非常に慣れていません。現在、型キャストが見られるソース コードを確認していますが、理解できませんでした。
これがコードです。
struct str {
char *a;
int b;
};
class F {
public:
char* val;
};
F f1;
誰かが以下の割り当てを説明できますか?またはその型キャストは有効ですか??
str* ptr = (str*) f1->val;
誰でも以下の割り当てを説明できますか。
これは、「ポインタがまったく異なる型を指すように宣言されているにもかかわらず、val
型のオブジェクトを指すふりをする; そのポインタを私に与えて、私が何をしているのかを知っていると信じてください」.str
char
これは、実際のコードが;F * f1;
として宣言するか、アクセスすることを前提としています。f1.val
投稿したコードはコンパイルされません。
またはその型キャストは有効ですか??
ポインターが実際に正しい型のオブジェクトを指している場合、それは有効です。そうしないと、ポインターを使用すると、プログラムがあらゆる種類の壊滅的な方法で失敗します。
型キャストが必要になることはめったにありません。本当に必要な場合は、その C スタイルのキャストを絶対に使用しないでください。それは、「たとえそれがまったく意味をなさない場合でも、何らかの方法がある限り、チェックなしで変換を強制する」ことを意味します。static_cast
ordynamic_cast
は、できる場合、reinterpret_cast
または非常に危険なことをしている場合に使用しconst_cast
ます。また、自分が何をしているのかを理解しており、型システムを回避する十分な理由がない限り、それらのいずれも使用しないでください。