Hlavní navigace

Názor ke článku Bezpečné programování v C++ II od Radim Dostál - [10] [18] Nechtěl jsem přímo zpochybnit STL.Je jasné,...

  • 25. 3. 2009 22:56

    Radim Dostál (neregistrovaný)

    [10] [18] Nechtěl jsem přímo zpochybnit STL.Je jasné, že něčemu věřit musíme. Hardware, operační systém, u některých programovacích jazyků i běhové prostředí (JRE) atd... Já jen, že i na to je potřeba myslet a navíc z toho příkladu nejde poznat jestli se jedná o standardní kontejner z STL v prostoru jmen std, nebo nějaký jiný se stejným rohraním.
    Šlo mi ale hlavně o to, že v čláku je:
    "Naše stará dobrá šablona funkce filter() dostala certifikát, který říká, že se výpočet zastaví v případě, že se zastaví callback funkce, kterou do funkce filter() posíláme jako parametr."

    což není pravda. Může být splněn předpoklad (funkce func se zastaví) a nesplněn důsledek (funkce filtr se nezastaví). Ať už za cenu nedefinovaného chování func (jak jsem psal), nebo jak je v [19] a [23]. Těch předpokladů musí být splněno více. Obávám se, že tak hodně (protože C i C++ dává programátorovi velkou svobodu), že nezbyde, než říct nějakou obecnou nic neříkající frázi třeba: "Funkce func musí být naprogramována bezchybně, aby funkce filtr skončila". Jenomže bezchbyně se snažíme dělat přece všechno. Ale kde vzít jistotu, že je opravdu bezchybná?

    [18]
    "V C++ se strcpy nepoužívá (a ani tam není explicitně definované, je pouze uvedeno, že je v cstring), v C++ jsou std::stringy (a ani ty strcpy nepoužívají)."
    Takže tam strcpy deklarována je. Stačí #include a jedem :-) A nejhorší je, že i kdyby nebyla, tak tam je například šablona std::copy, která jako parametry může mít i ukazatele a ty se mohou odkazovat kdoví kam.