Vychází to stejně. Switch je realizovaný jako JMP s úplně stejným obsahem. Rozdíl v tom, že jedno je CALL a druhý JMP se moc neprojeví, protože optimalizer by CALL strčil na jinou úroveň kódu, třeba do toho push_back, který se skrývá za přiřazení do iterátoru, který v tomhle případě inlinoval. Dělá to podle toho, jak moc vyjde inlinovaný kód dlouhý, když je přes nějaký treshold, rozhodne se tam udělat CALL.
V tom kódu s UTF-8 se navíc rozvine ten cyklus. Kdybys to psal switchem, nejspíš bys to rozvíjel ručně, nebo bys tam ten cyklus nechal. Možná - ale nemám to ověřený - by překladač nějak usoudil, že může vygenerovat varianty toho cyklu podle spočítaného indexu, ale myslím si že ne, alespoň ne GCC. Na to takovou umělou inteligencí neoplývají.
Intenzivně se zabývám programováním zejména v jazyce C++. Vyvíjím vlastní knihovny, vzory, techniky, používám šablony, to vše proto, aby se mi usnadnil život při návrhu aplikací. Pracoval jsem jako programátor ve společnosti Seznam.cz. Nyní jsem se usadil v jednom startupu, kde vyvíjím serverové komponenty a informační systémy v C++
Přečteno 50 890×
Přečteno 23 805×
Přečteno 22 794×
Přečteno 20 804×
Přečteno 17 676×