a kivételkezelés belül egy halom
if-re éselseif-re fog fordulni, ami a keletkezett exception értékekkel dolgozik
Ezt nem tudom, de szerintem nem ezen a részen megy el az idő nagy része. Kivéve persze ha egy csomó catch ág van mindenféle típussal.
Ez a zero cost amúgy sem túl tiszta, mert három C++ fejlesztő négyféleképpen magyarázza, Bjarne meg évszámtól függően.
Amennyire értem, eléggé tiszta miről van szó. A kódod ugyanúgy fut addig, amíg exceptiont nem dobsz. Nincs sehol se exceptionra ellenőrzés, hogy "vajon dobott-e ez a fv. exceptiont?". Hanem a throw sakkozza ki, azonnal azon a helyen, ahol dobódott, hogy mit kell csinálnia. Milyen destruktorokat kell meghívnia, és hogy melyik catch ágra kell ugrania. Ehhez pedig kell egy nagyobb táblázat, ami tartalmazza ezeket a dolgokat. De van valami nem tiszta neked, mondd, és talán tudom rá a választ.
C-ben erre nincs is szükség, hiszen a mechanizmusok sem ennyire bonyolultak.
Ez nem nyelvfüggő. Ha az a feladatod, hogy olyan programot írj, ami lekezeli az out of memory-t rendesen, akkor C-ben egy irgalmatlan nagy katyvasz lesz belőle. Minden malloc() visszatérési értéke ellenőrizve lesz, a resource-ok deallokálását kézzel kell végezni az összes esetben. Tele lesz rakat if-fel a kód. És goto-val is, ha a linux kerneles megoldást választod, ami egyébként valszeg a legjobb megoldás erre a problémára. A C++ kódon pedig kb. meg se fog látszani, hogy ilyet is tud, mert automatán működni fog. Meglehetősen nagy a különbség.
Mire jobb és miben jobb?
A hordozhatóságon kívül bármiben? De azért C++ elég sok mindenre van már, lássuk be, szóval a hordozhatóság se annyira probléma.
egyéb esetben a C kb. jobb assembly kódot fog generálni, mint amit a kóder írna. (Ezt egyszer kiveséztük.)
Lehet, nem emlékszek rá :) Remélem nem mondok magamnak akkor ellent, hogy ezzel a megállapítással nem értek egyet. Nagyon gyakran lehet javítani a compiler által készített kódon. Vagy ha nem is akar lemenni az ember asm-be, akkor is addig kell masszírozni a C kódot, amíg kb. azt a kódot nem látja az outputon, amit kb. vár. De amúgy igen, egy átlagos kóder ritkán csinána jobb kódot, mint egy fordító. De hogy ne a levegőbe beszéljek, itt egy példa: https://godbolt.org/z/zrzooa34x. Mindhárom elterjedt fordító meglehetősen rossz kódot csinál erre. De tudnék hozni egy rakat ilyen példát.
Ezt C-ben is lehet, hogy ki lehetne egyszerűsíteni; ezt a Linux kernelben láttad, vagy nem publikus céges cucc?
Nem igazán lehetett, mivel a változók típusa más volt, és picit másképp kellett kezelni bizonyos helyzeteket. Lehet, hogy lehetett volna 3-4 verziót csinálni, és akkor azokkal már szépen le lehetett volna kezelni. De C++-ban meg simán egy template megoldja. Céges cucc volt amúgy.