Odpovídáte na názor ke článku Skrytá úskalí vícenásobné dědičnosti v C++.
Jinak řečeno, vše je implementation defined. Za pár let může být ve zcela jinak.
Skutečný důvod, proč Microsoft dělá řadu věcí jinak je ten, že kromě normy C++ (která z hlediska obsahu článku nedefinuje vůbec nic). Za několik let může být článek pouhou historickou ukázkou.
Pokud by jednoduchá třída vracela sizeof nulu, je to plně v souladu s normou. Pokud je kompilátor schopen se vypořádat ve všech situacích, klidně to může udělat.
Jak gcc, tak Microsoft dělají práci navíc. Požadují nějaké další vlastnosti. Microsoft požaduje a preferuje dokonalou runtime kontrolu chyb. Bezchybnost programu je pro Microsoft vyšší prioritou než cokoli jiného.
Oba kompilátory plýtvají místem, jen podle jiného algororitmu. Oba se snaží doplnil dodatečné funkčnosti.
Rozdílnou filozofii lze vidět na implementaci STL. Gcc prostě má co požaduje norma a tečka. Microsoft má STL proloženou hromadou assertů a kontrol. Jednou, když jsem nemohl přijít několik dní na chybu v STL části, jsem jí prostě z gcc přeložil MS. Program jsem spustil a po vteřině mi chybu i se jménem zdrojáku a číslem řádku a detailním popisem vyhodil v message boxu.
Prioritou MS je i v délkách vysoká možnost detekce chyb.
Na Vašem místě bych ale zkontroloval jaké zarovnání u MS používáte.
Jinak by se slušelo také říci, že sizeof(x) neznamená, že proměnná zabere v paměti x bajtů. Oba kompilátory to naznačily už tím, že i nulovou délku vyhodily jako 1 bajt přes sizeof.
Nic nebrání kompilátoru, aby optimalizoval a pole 1000 objektů prázdné třídy uložil jako nula bajtů třeba na zásobník. A samozřejmě vrátil 1000 × sizeof(jeden objekt).
Na sizeof prostě kálí pes. Je to hodnota, která je větší nebo rovná tomu co objekt skutečně zabere.
Dělat diagnostiku přes sizeof a dělat z toho rozsáhlé závěry je pofiderní, samotný operátor sizeof lže.
A samozřejmě templaty něco stojí. Jako vše high-level.
Intenzivně se zabývám programováním zejména v jazyce C++. Vyvíjím vlastní knihovny, vzory, techniky, používám šablony, to vše proto, aby se mi usnadnil život při návrhu aplikací. Pracoval jsem jako programátor ve společnosti Seznam.cz. Nyní jsem se usadil v jednom startupu, kde vyvíjím serverové komponenty a informační systémy v C++
Přečteno 57 611×
Přečteno 27 724×
Přečteno 26 404×
Přečteno 24 368×
Přečteno 22 865×