Gdy skompiluję następujący kod z gcc
i g++
, g++
daje błąd, a nie gcc
. Zauważ, że kod konwertuje z int (*)[4]
na int (*)[]
(który jest wskaźnikiem na niekompletny typ tablicy).Różnice w niepełnych regułach tablicy wskaźnika między C i C++
int arr[4];
int (*p_arr)[] = &arr;
Jak omówiono w Incomplete array type?, C
język pozwala tej konwersji. Ale dlaczego C++
tego nie akceptuje i podaje błąd error: cannot convert ‘int (*)[4]’ to ‘int (*)[]’ in assignment
. Wiem, że C++ jest bardziej bezpieczny dla typu niż C, ale czy to przypisanie jest naprawdę niebezpieczne dla typu, ponieważ późniejszy dereferencja wskaźnika (np. sizeof(*p_arr)
) w każdym razie daje również błąd w C
?
Jaki późniejszy dereferencja? – ecatmur
@ecatmur Zaktualizowano pytanie na przykład: – user1969104
@ user2079303 Myślę, że pytanie w twoim linku dotyczy niekompletnego typu tablicy, ale nie dotyczy konwersji z kompletnego na niekompletny, w szczególności różnicę między 'c' i' C++ 'w tym zakresie. – user1969104