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++.
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.
Aneb proč nedává smysl říkat "x
je konstantní reference" a že tím programátor ve skutečnosti myslí "x
je reference na konstantu".
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.
V příspěvku bych chtěl popsat některé novinky v C++11 a C++14, ke kterým jsem se nedostal ve svých předchozích příspěvcích Co je nového v C++11 a Co je nového v C++14.
V příspěvku bych chtěl poukázat na některé typické chyby, kterých se programátoři dopouští, když začínají v C++ pracovat s chytrými ukazateli.
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.