gcc
とg++
で次のコードをコンパイルすると、gcc
ではなく、g++
にエラーが発生します。コードがint (*)[4]
からint (*)[]
(不完全な配列型へのポインタ)に変換されることに注意してください。 Incomplete array type?で説明したようにCとC++間の不完全な配列ポインタ変換規則の相違
int arr[4];
int (*p_arr)[] = &arr;
、C
言語は、この変換を可能にします。しかし、なぜC++
がこれを許可せず、エラーerror: cannot convert ‘int (*)[4]’ to ‘int (*)[]’ in assignment
を与えるのですか?私はC++がCより型の安全性が高いことを知っていますが、後でポインタの逆参照(例えばsizeof(*p_arr)
)がC
にもエラーを与えるので、この割り当ては本当に型が危険ですか?
後で逆参照することはありますか? – ecatmur
@ecatmur例を使って質問を更新しました – user1969104
@ user2079303あなたのリンクの質問は完全な配列型ではなく、完全型から完全型への変換ではなく、特にこの点では 'c'と' C++ 'の違いです。 – user1969104