void* buffer = (void*)malloc(100);
malloc() 関数の前に (void*) を付けることで、何が達成され、戻り値の型をオーバーライドしているのでしょうか?
malloc はすでに void ポインタを返しているため、何も達成されません。これは次と同等です。
void* buffer = malloc(100);
への呼び出しの戻り値の型は、ポインターmalloc
に明示的にキャストされています。void
これはすでに a を返しているため、一種の冗長ですが、開発者の意図を明確にするために存在している可能性があります (または、開発者が失敗しただけです)void*
。
この特定のケースでは、何もしません。ただし、C++ は型の安全性に関して C よりもはるかに厳密であるため、通常は次の戻り値をキャストする必要がありますmalloc
。
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
。