.oisyn schreef op dinsdag 23 juli 2013 @ 12:10:
[...]
Er zit zo goed als geen verschil tussen C++'s dynamic_cast en Java's cast. Behalve dat Java een C-style syntax gebruikt, wat in C++ resulteert in een static_cast danwel reinterpret_cast, al dan niet gecombineerd met een const_cast, en over het algemeen dus afgeraden wordt om te gebruiken juist omdat je hier zo snel mee de fout in kan gaan.
Mijn C++ is te roestig om deze uitspraak op waarde te kunnen schatten, maar het voorbeeld dat ik via Googlen vond, is dat het met pointers mogelijk is om een int* te casten naar een char*, waarbij er dus herinterpretatie plaats vindt van wat er op dat geheugenadres is opgeslagen (wat in dit geval goed gaat omdat de geheugenstructuur toevallig gelijk is). Dit kan met Java references/casts niet.
Zoijar schreef op dinsdag 23 juli 2013 @ 13:10:
De verschillen in pointer gedrag zijn slechts wat restricties voor veiligheid. Het verschil met (C++) references of aliases is fundamenteel en functioneel. Het klassieke voorbeeld is dat het in Java zonder alias references onmogelijk is een directe swap functie te schrijven. References halen iets van buiten naar binnen je scope onder een andere naam.
M.i. is het verschil met pointers net zo functioneel en fundamenteel.
Het swap-voorbeeld heeft overigens niets te maken met of Java references nou meer op C++ references lijken of op pointers, maar met pass-by-reference vs. pass-by-value semantiek bij het doorgeven van variabelen. Als Java pass-by-reference semantiek zou implementeren, zou het prima mogelijk zijn om een directe swap-method te implementeren, ook voor de huidige references.
Dus wat mij betreft: "Java reference != C++ reference", en "Java reference != C++ pointer".
[
Voor 41% gewijzigd door
Herko_ter_Horst op 23-07-2013 13:45
]