Odpověď na názor

Odpovídáte na názor ke článku Skrytá úskalí vícenásobné dědičnosti v C++.

  • 7. 5. 2012 2:50

    Miloslav Ponkrác (neregistrovaný)

    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.