Registrace nového uživatele     Návod     Kluby     Archív  Lopuchu     Lopuch.cz  

Nudou jsi opuch?
Navštiv Lopuch!

Lopuch.cz

Jméno:
Heslo:
Podpora LCD:
 
Klub C, C++ [ŽP: neomezená] (kategorie Programování) moderuje Šéf Lopuchu.
Archiv

Články

Jak bezpečně ukončit vlákno z DllMain
FastAllocPool - urychlení častých alokací a dealokací
Akce a zpráva jako objekt
Tuply v C++
Efektivní alokátor malých objektů a tady druhý a třetí díl
Šablony: Být vládce kvalifikátorů
Vracíme z funkce objekty
Základy komunikace mezi procesy (ve Windows)
Multiple Interface a Instance Factory
Multithreading v C++ (ve Win32)
  Nastavení klubu     Nastavení práv     Homepage     Anketa     Přítomní     Oblíbené     Lopuch     Kategorie  
autor: 
text: 
vyplnit a 
Help
 Titulek, text příspěvku  
Opište pozpátku následující text bez prostředního znaku: vzaergy
[ 380 ] <Novější  <<<Nejnovější  Nejstarší>>>  Starší>  
huh huh 30.11.2010 23:57  836
Bredy [835]: char je default implementation defined !
bredy 30.11.2010 22:58  835
char je default signed, takže to vrátí 1. Tady se trošku ukazuje, jak se switch stává nekoncepční v C++. Pominuli nutnost breaků, používat switch v šablonách se opravdu nedoporučuje. Klidně i kdyby to znamenalo, že optimalizace tabulkou skoků by fungovala jen u ordinálních typů a jinak by se to přepisovalo do série ifů.

správně by podle mého názoru mělo být tak, že switch ctí typ selektoru a konvertuje konstanty do stejného typu jako selektor. Bohužel to funguje po staru cečkovsky
huh huh 30.11.2010 17:06  834
Bredy [833]: jen tak nasucho. Je-li char unsigned, tak to vrátí 3, jinak 1.
bredy 30.11.2010 14:07  833
WCKB prosinec
int oops() {
     char ch = 0x80;
     switch (ch) {
     case 0x80:
         return 3;
     case 0x40:
         return 2;
     default:
         return 1;
     }
}

Jak to dopadne?
huh huh 8.6.2010 21:35  832
No pokud vím, tak vc 2008 implementuje c++98 už prakticky bezezbytku, 2010 už implementuje i něco z c++0x (podobně gcc 4.5). Popravdě to, co jsem potřebovat nebyl problém přenést mezi gcc 4 a msvc 2008. Naopak c++ builder 2009 je katastrofa tak na úrovni vc 6 ... Ale je fakt, že já zdaleka nedělám takovou šablonovou magii jako ty :-)
Mě osobně mnohem víc mrzí, že ms kašle na obyčejné céčko a odmítá implementovat c99.
bredy 8.6.2010 20:55  831
huhPohybuju se mezi MSVC a GCC a i když asi GCC je co se týče standardu konzistetní, kolikrát kroutím hlavou, co se tam objevuje za p.čoviny a proč MSVC standard místy nedodržuje :-)
huh huh 8.6.2010 20:52  830
Bredy [829]: Vyznáš. Zrovna standard C++ je v rámci možností relativně snesitelný (ve srovnání třeba s SQL standardem). Tebe navíc nezajímají nějaká komplikovaná pravidla např. u šablon, ale stačí ti zmáčknout Ctrl-F, napsat istream_iterator a počkat, jestli to něco najde nebo ne. A pokud ho nemáš v elektronické podobě, tak ho snadno najdeš i podle obsahu: 24 Iterators library \ 24.5 Stream iterators.
bredy 8.6.2010 20:14  829
A mysliš, že se v něm vyznám?
huh huh 8.6.2010 19:52  828
Bredy [827]: Jsou. Se do toho standardu podívej :-)
bredy 8.6.2010 19:44  827
Ad istream_iterator... nejsem si jist, jestli streamove iteratory jsou součastí poslední normy C++. Jsou v STL, ale ne ve standardu. Nebo jo?
huh huh 8.6.2010 08:07  826
Já samozřejmě netvrdím, že se něco takovýho má používat :-) to byla čistě taková hádanka :-)
stinny 8.6.2010 07:59  825
To je dost kryptický zápis. Není rozumnější naprogramovat si "istream& operator>>(istream &, vector<T>&)"? Pak bys napsal jen "cin >> v".
huh huh 8.6.2010 07:11  824
ŘešeníPokud jste nečetli zadání, tak je zde, prosím přečtěte si ho a zkuste vyřešit.
Moje řešení následuje, netvrdím, že je jediné či nejlepší (vyberte myší text pro zobrazení):
*back_inserter(v) = *istream_iterator<int>(cin);
Pokud by mělo být opravdu použitelné, bylo by potřeba si napsat vlastní istream_iterator, který vyhodí výjimku, pokud dojde při čtení k chybě, takhle to buď načte nesmysl nebo udělá chaos :-)

huh huh 4.6.2010 20:12  823
Tak jistě, v tom je ta záludnost, jinak by stačilo cin >> v[0];
bredy 4.6.2010 20:03  822
No vzhledem k tomu, že neznám STL z paměti, tak tohle nevím. Napadlo mne použití cin >> *v.begin(), ale problémem je pro mě nejprve vyrobit ten první prvek ve vektoru v, protože v.begin() jinak ukazuje na end()

[ 380 ] <Novější  <<<Nejnovější  Nejstarší>>>  Starší>  

(c) 2001-2011 Lopuch.cz   
Kontakt