Zobrazit předchozí téma :: Zobrazit následující téma |
Autor |
Zpráva |
]semo[
Založen: 29. 07. 2007 Příspěvky: 1525 Bydliště: Telč
|
Zaslal: 17. červen 2013, 09:36:17 Předmět: |
|
|
Dobře, ale pokud budeš někde prohlašovat, že to je správné použití dynamic_cast, budeš mít co do činění se mnou! :-) :-D _________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
|
perry
Založen: 28. 07. 2009 Příspěvky: 879
|
Zaslal: 17. červen 2013, 09:44:58 Předmět: |
|
|
Používám často i renterpret_cast _________________ Perry.cz |
|
Návrat nahoru |
|
|
]semo[
Založen: 29. 07. 2007 Příspěvky: 1525 Bydliště: Telč
|
Zaslal: 17. červen 2013, 09:49:19 Předmět: |
|
|
Tak záleží jak to používáš, ale věřím, že dobře ;-).
Nicméně, zdá se, že sme původní diskuzi obrátili špatným směrem :) _________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
|
Vilem Otte
Založen: 18. 09. 2007 Příspěvky: 462 Bydliště: Znojmo - Sedlesovice, Kravi Hora
|
Zaslal: 17. červen 2013, 09:51:54 Předmět: |
|
|
#semo - jen pseudo-kód narychlo nasypaný do pastebinu - bere ještě parametr (ten se někde ztratil), bylo to psáno v rychlosti, jelikož momentálně mám dost napilno -.-' _________________ Should array indices start at 0 or 1? My compromise of 0.5 was rejected without, I thought, proper consideration. |
|
Návrat nahoru |
|
|
Lemik
Založen: 30. 07. 2007 Příspěvky: 138
|
Zaslal: 19. červen 2013, 10:27:34 Předmět: |
|
|
mar napsal: |
Výjimky v C++ potenciálně můžou vést k resource leakům |
Pak to chce použít unique_ptr nebo shared_ptr. Jinak je to stále o návrhu - tedy pokud to nechceme mermomocí nacpat na nějaký legacy kód, ale i tam už mi shared_ptr pomohl...
Mimochodem nezapomeňte, že standardní knihovna C++ (hezky jsem se to vyhnul zkratce STL) dovoluje i použít vlastní kód jako alokátory, deletery, compare aj. Nemusíte nutně používat standardní implementaci.
Předávání parametrů (argumentů) pomocí hodnoty, namísto reference, je podle mě díky špatnému vyučování už od začátku... Ty různé knihy pro C++ či game development s kódem C++ to často mají špatně, anebo velmi nedostatečně vysvětlené. Případně ještě vyučují "pseudo" C/C++.
K tomu, když ještě přihodíme "poučky" jako:
- pokud možno, vracej návratovou hodnotu z funkce pomocí hodnoty (copy elision optimalizace)
- parametry funkcí (i funkce samotné a etc.) specifikuj jako const, pokud z argumentu jen čteš a nezapisuješ do něj - kompiler pak dohlíží na to, že const je opravdu splněno...
Nakonec si pak můžeme říci, jestli C++ není špatně navrženo už od základů. To ale platí pro každý jazyk (nejen programovací). Pokud se ale jazyk používá dobře...
Vilem Otte:
Jasně, takový kód/příklad špatně ukazuje použití exceptions. Kdyby to ale byl vstup, který zadává uživatel a exception zůstává lokální (není rethrow), pak můžeš uživatele upozornit a zkusit to znovu - to je ale o tom vyučování. Člověk by musel chodit a všude přepisovat příklady, kapitoly v knihách atd.
perry:
Ti potomci mají typ známý v době kompilace, nebo je tam házíš např. načtením z jiné knihovny apod? |
|
Návrat nahoru |
|
|
]semo[
Založen: 29. 07. 2007 Příspěvky: 1525 Bydliště: Telč
|
Zaslal: 19. červen 2013, 11:32:36 Předmět: |
|
|
Lemik napsal: |
- pokud možno, vracej návratovou hodnotu z funkce pomocí hodnoty (copy elision optimalizace)
- parametry funkcí (i funkce samotné a etc.) specifikuj jako const, pokud z argumentu jen čteš a nezapisuješ do něj - kompiler pak dohlíží na to, že const je opravdu splněno...
Nakonec si pak můžeme říci, jestli C++ není špatně navrženo už od základů. |
Tučně vyznačenou větu vyvozuješ z těch dvou nahoře? Nějak nechápu, co je špatnýho na const a výsledcích funkce hodnotou. C++ prostě neni pro skriptery :-). _________________ Kdo jede na tygru, nesmí sesednout.
---
http://www.inventurakrajiny.cz/sipka/
Aquadelic GT, Mafia II, simulátory |
|
Návrat nahoru |
|
|
Tringi
Založen: 28. 07. 2007 Příspěvky: 289
|
Zaslal: 19. červen 2013, 12:55:10 Předmět: |
|
|
Bjarne se jednou nechal slyšet, že kdyby C++ designoval znova, jediné co by udělal jinak by bylo, že by obrátil logiku "const" ...tedy vše je "const" dokud nespecifikuješ jinak.
Ale pak: Existují jen dva druhy programovacích jazyků: Ty na které všichni nadávají a ty které nikdo nepoužívá. _________________ WWW | GitHub | TW |
|
Návrat nahoru |
|
|
mar
Založen: 16. 06. 2012 Příspěvky: 602
|
Zaslal: 19. červen 2013, 13:29:15 Předmět: |
|
|
Lemik napsal: |
Nakonec si pak můžeme říci, jestli C++ není špatně navrženo už od základů. |
Tak nic není dokonalé. Pokud neznáš, zkus mrknout na D, kdysi to bylo jednodušší a celkem pěkné, nicméně to stejně nemá šanci prorazit, protože to je one man show, jen tak pro zajímavost. |
|
Návrat nahoru |
|
|
Tringi
Založen: 28. 07. 2007 Příspěvky: 289
|
Zaslal: 19. červen 2013, 14:09:11 Předmět: |
|
|
mar napsal: |
Lemik napsal: |
Nakonec si pak můžeme říci, jestli C++ není špatně navrženo už od základů. |
Tak nic není dokonalé. Pokud neznáš, zkus mrknout na D, kdysi to bylo jednodušší a celkem pěkné, nicméně to stejně nemá šanci prorazit, protože to je one man show, jen tak pro zajímavost. |
A Alexandrescu je současně i velkým C++ expertem. _________________ WWW | GitHub | TW |
|
Návrat nahoru |
|
|
mar
Založen: 16. 06. 2012 Příspěvky: 602
|
Zaslal: 19. červen 2013, 14:11:08 Předmět: |
|
|
Tringi napsal: |
A Alexandrescu je současně i velkým C++ expertem. |
O tom žádná, nicméně AFAIK D vyvíjí Bright |
|
Návrat nahoru |
|
|
quas4
Založen: 18. 10. 2007 Příspěvky: 199
|
Zaslal: 19. červen 2013, 14:28:25 Předmět: |
|
|
Tringi napsal: |
Bjarne se jednou nechal slyšet, že kdyby C++ designoval znova, jediné co by udělal jinak by bylo, že by obrátil logiku "const" ...tedy vše je "const" dokud nespecifikuješ jinak. |
v rust-lang.org bylo zavedeno "mut" protoze vse je defaultne immutable. Zrovna na hry je to podle me velmi vhodny a prakticky jazyk. Je sice jeste hodne mlady a trpi par problemy (napriklad pomala kompilace) ale stoji za zkouknuti. |
|
Návrat nahoru |
|
|
Tringi
Založen: 28. 07. 2007 Příspěvky: 289
|
Zaslal: 19. červen 2013, 14:33:41 Předmět: |
|
|
Tringi napsal: |
mar napsal: |
Lemik napsal: |
Nakonec si pak můžeme říci, jestli C++ není špatně navrženo už od základů. |
Tak nic není dokonalé. Pokud neznáš, zkus mrknout na D, kdysi to bylo jednodušší a celkem pěkné, nicméně to stejně nemá šanci prorazit, protože to je one man show, jen tak pro zajímavost. |
A Alexandrescu je současně i velkým C++ expertem. |
Ah, ověřil jsem si stav, a dělají na tom stále oba ...z nějakého obskurního důvodu jsem si myslel že Bright odstoupil z aktivního vývoje. _________________ WWW | GitHub | TW |
|
Návrat nahoru |
|
|
Lemik
Založen: 30. 07. 2007 Příspěvky: 138
|
Zaslal: 19. červen 2013, 17:01:27 Předmět: |
|
|
]semo[ napsal: |
Lemik napsal: |
- pokud možno, vracej návratovou hodnotu z funkce pomocí hodnoty (copy elision optimalizace)
- parametry funkcí (i funkce samotné a etc.) specifikuj jako const, pokud z argumentu jen čteš a nezapisuješ do něj - kompiler pak dohlíží na to, že const je opravdu splněno...
Nakonec si pak můžeme říci, jestli C++ není špatně navrženo už od základů. |
Tučně vyznačenou větu vyvozuješ z těch dvou nahoře? Nějak nechápu, co je špatnýho na const a výsledcích funkce hodnotou. C++ prostě neni pro skriptery . |
Vůbec ne. Narážím na to, že to je většinou špatně vyučované už od začátku, kdy máš v knize příklady jako:
int add ( int value1, int value 2 )
namísto
int add( const int& value1, const int& value2 )
(a to dokonce i v knize o algoritmech...)
Když pak přijde nějaký "typický" C/C++ programátor, tak jazyk nepoužívá správně, neví pořádně co jazyk nabízí a umožňuje. Pro ně je ten jazyk špatný, neefektivní a mají tendenci si to dělat po svém. (Setkal jsem se i s případem, který si implementoval vlastní linked list a přepisoval algoritmy, protože mu to neběželo dost rychle, a přitom to byl debug build...)
Když jim ukážeš, jak se to má dělat, co asi většinou řeknou? Jen málo z nich pochopí, proč ty poučky mají smysl a jak fungují, nebo se nad tím alespoň zamyslí.
BTW jsem milovníkem "strongly typed" compiled languages, a C++11 považuji za hlavního koně(-; |
|
Návrat nahoru |
|
|
mar
Založen: 16. 06. 2012 Příspěvky: 602
|
Zaslal: 19. červen 2013, 17:37:53 Předmět: |
|
|
Lemik napsal: |
int add ( int value1, int value 2 )
namísto
int add( const int& value1, const int& value2 )
(a to dokonce i v knize o algoritmech...)
|
Tak tohle není zrovna dobrý příklad. Elementární datové typy, co se vejdou do registru, nemá smysl předávat referencemi (pokud nejsou výstupní) - co je jednodušší, sečíst dvě hodnoty nebo dereferencovat dva ukazatele a sečíst výsledek? Samozřejmě za předpokladu, že to překladač nezoptimalizuje. U objektů je situace jiná, pointa byla vyhnout se kopírování objektů. |
|
Návrat nahoru |
|
|
rezna
Založen: 27. 07. 2007 Příspěvky: 2156
|
Zaslal: 24. červen 2013, 13:17:54 Předmět: |
|
|
Lemik napsal: |
Vůbec ne. Narážím na to, že to je většinou špatně vyučované už od začátku, kdy máš v knize příklady jako:
int add ( int value1, int value 2 )
namísto
int add( const int& value1, const int& value2 )
(a to dokonce i v knize o algoritmech...) |
hele narazil jsem na to ted na IRC - proc je prvni tak spatne a to druhe tak dobre? mohl bys to popsat? |
|
Návrat nahoru |
|
|
|