Při revizi kódu se pravidelně setkávám s následující chybou, kdy dochází k uchovávání referencí na dočasné objekty. Problém se vyskytuje nejen v C++, ale i C. Já jej ovšem budu ilustrovat v C++.
Dnes se v našem seriálu o chybách v návrhu podíváme na situace, při nichž bychom plnohodnotným využíváním typového systému zpřehlednili kód a učinili jej méně náchylným k chybám.
Nedávno jsem narazil na zajímavou situaci, kdy mi překladač u C++ kódu hlásil varování, že vytvořený objekt není nikde použitý, ale přitom se na něm hned na dalším řádku volala metoda. Pojďme se společně podívat na onen kód a na to, zda měl překladač pravdu.
Ukážeme si dva případy, kdy přítomnost kulatých závorek v C++ na první pohled působí zbytečně, ale přitom má značný vliv na význam kódu. A nebojte, nebude se jednat o uzávorkování z důvodů priority operátorů :).
V příspěvku se podíváme na rozdíl mezi operacemi match a search u regulárních výrazů v jazycích C++ a Python. Především si však ukážeme záludnost, ve které se operace match ve zmíněných jazycích liší. Velmi stručně se podíváme i na pár dalších jazyků.
Možnost vytvářet v C a C++ ukazatele na funkce či pole je poměrně dobře známá. V C++ však lze mimo ukazatelů vytvářet i reference na funkce a pole. V příspěvku se krátce podíváme na to, kdy se to může hodit.
Od C++11 přibyly tzv. typové aliasy (using TypeAlias = OriginalType;). Jedná se o alternativu pro klasický typedef. V příspěvku uvedu několik důvodů, proč od C++11 na typedef zapomenout a využívat pouze typové aliasy.