const v C++

Ing. Miloslav Ponkrác miloslav.ponkrac na interval.cz
Pondělí Září 17 15:27:01 CEST 2001


>> Mozna tohle taky nepude... Musi to pole byt constatni?
>No nemusi, pokud neni konstatni tak to funguje bezproblemu jak na RH6.1 tak
>na RH 7.1. Pokud je konstantni tak pouze na RH 6.1. Jde o to zde jsou
>definovany pocatecne hodnoty barev. Ty se pak prekopiruji do pouzivane
>tabulky barev. Pocatecni hodnoty jsou nemene, proto jsem je automaticky
>udelal jako const.


To už je druhý, co navrhuje, že problémy budou s const. Jenom že proti mě,
když jsem to navrhl poprvé, někdo vyjel, tak jsem toho nechal. A teď se
dozvím, že po odstranění const to neblbne. Ale aby to někdo raději zkusil...

Jádro pudla je totiž v tom, že static const není v C++ to samé, co v C. Bylo
by dobré si ten rozdíl ujasnit. A to tak, že pokud se kompilátor zblázní do
optimalizace, tak se snaží nevytvářet paměť pro pole, tedy nevyhradit jí
místo v paměti. Ale pokud možno tam raději dosazuje přímo hodnoty, aniž by
pole vůbec v paměti existovalo!. A pokud to nezvládne, tu optimalizaci, tak
máte přesně tu chybu, která nastává, tedy překladač zpanikaří a dělá všechno
možné jenom ne, to co by měl. A nezvládnutí je u pole podstatně
pravděpodobnější, než u jednoduché proměnné.

Miloslav Ponkrác



Další informace o konferenci Linux