void* buffer = (void*)malloc(100);
malloc()関数の前に(void *)を付けると、何が達成されているのですか?戻り値の型をオーバーライドしていますか?mallocの前に(void *)があるのはなぜですか?
void* buffer = (void*)malloc(100);
malloc()関数の前に(void *)を付けると、何が達成されているのですか?戻り値の型をオーバーライドしていますか?mallocの前に(void *)があるのはなぜですか?
malloc
への呼び出しの戻り値の型が明示的にvoid
ポインタにキャストされている:これは同等です。これは冗長で、既にを返していますが、
(おそらく
)が開発者の意図を明確にするために存在する可能性があります。
"開発者の意図を明確にするためにおそらく存在しています"もしそうなら、それは著者側の大きな謎です。キャストは型システムを放棄する効果があります。正気のプログラマーは、決してキャストを使用することができないほど頑張ります。偽りの不要なキャストを追加することは、信念を超えてひどいです。 –
@DavidHeffernan真実、良い点。私はいつも疑念の恩恵を得ようとしますが、それでも私の反応を編集しました。 –
この場合、何もしません。しかし、C++を使用すると、一般的にmalloc
のリターンをキャストする必要があり、型の安全性に関するCよりもはるかに厳しいですので、:
void* x = malloc(100); //OK in C/C++
int* y = malloc(100); //OK in C, error in C++
int* z = (int*)malloc(100); //OK in C/C++, not recommended for C
しかし、あなたがC++を使用するので、私はあなたがnew
を使用する必要があることを教えてくれないことはできません代わりに。
ブレークダウンありがとう:D – jwbensley
これは、 'malloc'が' void * '型のポインタを返すことを知らないことを意味します。 –
接頭辞btwではなく*キャスト*です。 –