const v C++

Ing. Miloslav Ponkrác miloslav.ponkrac na interval.cz
Středa Září 19 18:21:49 CEST 2001


>> 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é.
>
>Ale pole s hodnotami typu integer zvladne, s hodnotami typu QColor ne, on
ho
>sice vytvori ale do vsech prvku cele radky nacpe pouze prvni hodnotu.
>Upozornuji ze optimalizace jsou vypnute.


No, vždyť je to logické. Přeci se snaží optimalizovat. Chápejte, že v C++
static const bylo původně myšleno tak, že ač static, tak nebude pokud možno
vůbec nic v paměti. Ve skutečnosti je význam static const hodně podobný
významu register const. Pokud ovšem vytvoříte odkaz na takové pole, pak by
měl pole uložit, ale i tady se snaží optimalizovat. No, a taková
optimalizace ne vždy dopadá nejlíp. Proto kompilátory většinou static const
berou stejně jako v C, tedy neblbnou.

Chápejte, že každý překladač umí spíše optimalizovat int, než QColor, i když
vnitřní reprezentace je téměř totéž. A z hlediska selského rozumu bude spíše
chyba v optimalizaci QColor, než v optimalizaci int.

Jenomže GCC se snaží zavést každou feature, a tak je občas
přeoptimalizováno. Někdy je to na škodu. Zkrátka záleží na verzi GCC.

Dle mého je lépe se prostě ve složitějších výrazech u takových kompilátorů,
kteřé si hrají na přílišnou optimalizaci prostě dvojici static const
nepoužívat.

Už končím s vysvětlováním. Myslím, že jsem napsal více, než dost a opakuji
stále to samé. Prostě pokud více programujete, čas od času se dostanete k
tomu, že ladíte i kompilátor C++. I kompilátory mívají občas chyby. Proto je
pro klid programátora dobré vědět, na které kompilátory a které verze
kompilátoru je spolehnutí, a které verze jsou nestabilní. A těm nestabilním
se vyhnout, pokud možno.

S pozdravem

Miloslav Ponkrác



Další informace o konferenci Linux