4

重複の可能性:
C ++でmalloc()のキャストが必要なのに、Cでは必要ないのはなぜですか?

この特定のコードはCで正常に実行されますが、C++プログラムとしてコンパイルするとコンパイルエラーが発生します。

#include<stdio.h>
#include<stdlib.h>
int main(){
    int (*b)[10];
    b = calloc(20, sizeof(int));
    return 0;
}

C++コンパイルのエラーは次のとおりです。

test.cpp: In function ‘int main()’:
test.cpp:9:28: error: invalid conversion from ‘void*’ to ‘int (*)[10]’ [-fpermissive]

理由は何でしょうか?

4

3 に答える 3

6

Cでは、voidポインターから他のポインター型に暗黙的にキャストできますが、C ++では許可されていないため、明示的にキャストする必要があります。

b = (int (*)[10])calloc(20, sizeof(int));
于 2012-11-05T05:48:22.647 に答える
1

C++より厳密な型チェック言語ですC。したがって、手動で型キャストする必要がありますが、C では自動的に型キャストされます。

ここで calloc は型をvoid*返します。したがって、型キャストは必須です。bint(*)[]

C++ では、他の型カーストも利用できます。覚えておく必要があります

<static_cast>
<const_cast>
<reinterpret_cast>
<dynamic_cast>

詳細については、これを参照してください

于 2012-11-05T06:01:50.290 に答える
0

Cはキャストに関してより寛容であり、C++ではキャスト時に明示的である必要があります。Cバージョンでもキャストする必要があります。

于 2012-11-05T05:51:23.967 に答える