0

私はC++に非常に慣れていません。現在、型キャストが見られるソース コードを確認していますが、理解できませんでした。
これがコードです。

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

class F {
public:
    char* val;
};  

F f1;  

誰かが以下の割り当てを説明できますか?またはその型キャストは有効ですか??

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

1 に答える 1

3

誰でも以下の割り当てを説明できますか。

これは、「ポインタがまったく異なる型を指すように宣言されているにもかかわらず、val型のオブジェクトを指すふりをする; そのポインタを私に与えて、私が何をしているのかを知っていると信じてください」.strchar

これは、実際のコードが;F * f1;として宣言するか、アクセスすることを前提としています。f1.val投稿したコードはコンパイルされません。

またはその型キャストは有効ですか??

ポインターが実際に正しい型のオブジェクトを指している場合、それは有効です。そうしないと、ポインターを使用すると、プログラムがあらゆる種類の壊滅的な方法で失敗します。

型キャストが必要になることはめったにありません。本当に必要な場合は、その C スタイルのキャストを絶対に使用しないでください。それは、「たとえそれがまったく意味をなさない場合でも、何らかの方法がある限り、チェックなしで変換を強制する」ことを意味します。static_castordynamic_castは、できる場合、reinterpret_castまたは非常に危険なことをしている場合に使用しconst_castます。また、自分が何をしているのかを理解しており、型システムを回避する十分な理由がない限り、それらのいずれも使用しないでください。

于 2012-09-19T22:57:01.123 に答える