Weil void * in c++ wird nicht automatisch in einen Zeigertyp konvertiert.
In c besteht jedoch keine Notwendigkeit für die Umwandlung, und tatsächlich macht es den Code unnötig hässlich, abgesehen davon, dass Fehler aus Ihrem Programm versteckt werden, siehe hier. Kann ich das Ergebnis von malloc? umwandeln.
wir können static_cast zu und von void-Zeigertypen zumindest in c++
– Roter Alarm
6. Mai 2015 um 21:46 Uhr
@RedAlert ist es nicht reinterpret_cast genau äquivalent zu Typ-C-Casts?
– Iharob Al Asimi
6. Mai 2015 um 22:00 Uhr
reinterpret_cast ist eine Spezialisierung des sehr generischen C-Castings. Wenn Sie eine Umwandlung im C-Stil verwenden, wählt der Compiler aus, welche Art von Umwandlung verwendet werden soll. Das kann man zum Beispiel nicht sagen reinterpret_cast<double>(6)aber man kann sagen (double) 6. Außerdem, reinterpret_cast Konstanz kann nicht weggeworfen werden, während eine Besetzung im C-Stil dies kann (Sie benötigen const_cast dafür in c++). In der Besetzung von void*gibt es technisch gesehen nichts zu “reinterpretieren”, da ein void-Zeiger nicht verrät, auf welchen Typ er zeigt.
– Roter Alarm
6. Mai 2015 um 22:24 Uhr
13106500cookie-checkmalloc – ungültige Umwandlung von void* in double*yes
Klingt so, als würden Sie einen C++-Compiler anstelle von C verwenden.
– Barmar
6. Mai 2015 um 21:37 Uhr
Wie kompilierst du? Es hört sich so an, als würden Sie möglicherweise eine verwenden
c++
Compiler– Roter Alarm
6. Mai 2015 um 21:38 Uhr
C erlaubt
void*
Zeiger, die in/von jedem anderen Zeigertyp konvertiert werden sollen. C++ erfordert eine explizite Umwandlung.– Barmar
6. Mai 2015 um 21:38 Uhr
Aber wenn Sie C++ verwenden, sollten Sie entweder verwenden
std::vector
odernew double[size]
.– Barmar
6. Mai 2015 um 21:39 Uhr
Ändern Sie das Suffix Ihrer Quelldatei von .cpp in .c und kompilieren Sie sie dann als C und nicht als C++.
– PaulR
6. Mai 2015 um 21:51 Uhr