- 1
- 2
- 3
- 4
- 5
string toString( int i ) {
stringstream s;
s << i;
return s.str();
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+22
string toString( int i ) {
stringstream s;
s << i;
return s.str();
}
Наткнулся на эту функцию в одном из своих старых проектом.
bormand 11.09.2012 05:17 # +6
boost::lexical_cast вроде бы так и реализован.
Но вот скорее всего оно не нужно, т.к. в большинстве случаев из подобных кусочков пособирают сложную строку, и лучше там и вставить стрингстрим (будет пошустрее, не намного длиннее, и можно будет управлять форматированием):
defecate-plusplus 11.09.2012 07:26 # +3
defecate-plusplus 11.09.2012 10:07 # +2
думал, распиаренный спирит всех уделает надо бы как-нибудь буст 1.51 уже поставить на свой комп и поиграться с ключами оптимизаций
LispGovno 11.09.2012 11:49 # −2
defecate-plusplus 11.09.2012 12:35 # +1
http://tinodidriksen.com/2010/02/07/cpp-convert-int-to-string-speed/
LispGovno 11.09.2012 12:53 # +2
И да, boost::spirit самый тормозной (как до времени компиляции, так и выполнения) генератор парсеров, из всех что я видел. А знаешь почему? Потому что его написали через одно место. Вместо того, чтобы генерировать код, условно говоря, машины состояний, чтобы он работал очень быстро, они написали его на основе комбинаторов. Конечно же получилось такое же тормозное говно, как и Parsec из Хаскеля. А все почему? Потому что кресты не могут в кодогенерацию в отличии от какого-нибудь D или Nemerle (где парсеры быстрые) или специальных кодогенерящих утилит генераторов парсеров ОЛОЛОЛ КРЕСТОПРОБЛЕМЫ.
defecate-plusplus 11.09.2012 13:10 # +2
на скорость выполнения жаловаться не приходилось - все работало мгновенно, но бенчмарков я не делал
вносить правки прямо в с++ код и видеть результат по F5 - это замечательно
описывать грамматику практически в терминах задания - великолепно
ну а скорость компиляции - спирит тут вне конкуренции, бесспорно, я не знаю ничего подобного - пришлось заодно решать задачу как снизить пиковые потребления памяти компилятором, потому что если на 8 гигах на десктопе оно ворочалось, то на 2 гигах на ноуте был сразу пиздец - студийный компилятор просто падал
ну а для реальной жизни - спирит не пригодился ни разу, вообще
LispGovno 11.09.2012 13:34 # +1
D и Nemerle. Генератор парсеров на уровне библиотеки языка в обоих. Второй вон даже подчеркивает неправильные места со внятными всплывающими сообщениями о причинах ошибки даже ещё до компиляции и нет не читабельных ошибок в стиле кококо длинный список инстансов шаблона на страницу из нутрей буста кококо, разбирайся как хочешь).
defecate-plusplus 11.09.2012 13:44 # 0
вот что я хотел сказать
потом конечно пришлось вовсю пользоваться трюками, позволившими обойтись минутой и гигом оперативы в пике, но осадочек остался
LispGovno 11.09.2012 11:47 # +1
LispGovno 11.09.2012 12:59 # +9
absolut 11.09.2012 19:32 # 0
defecate-plusplus 11.09.2012 19:38 # +3
absolut 11.09.2012 20:08 # +2
defecate-plusplus 11.09.2012 20:17 # 0
Returns: Each function returns a string object holding the character representation of the value of its argument that would be generated by calling sprintf(buf, fmt, val) with a format specifier of "%d", "%u", "%ld", "%lu", "%lld", "%llu", "%f", "%f", or "%Lf", respectively, where buf designates an internal character buffer of sufficient size.
уверен, вендоры не парились и фразу would be поняли как should be
bormand 11.09.2012 20:21 # 0
Но absolut наверное имел в виду "как указать другой формат, если не устраивает стандартный".
defecate-plusplus 11.09.2012 20:36 # 0
sprintf разве умеет в локали?
bormand 11.09.2012 20:56 # 0
http://ideone.com/AVaSW
defecate-plusplus 11.09.2012 21:05 # +1
как сишную ru_RU перевести в крестоблядскую std::locale?
> what(): locale::facet::_S_create_c_locale name not valid
bormand 11.09.2012 21:14 # 0
P.S. У меня в бубунте работает, на Ideone краш. Видимо нет у них русской локали.
Вот так (с пиндосским en_US):
http://ideone.com/pS8wQ
defecate-plusplus 11.09.2012 21:15 # 0
походу сишный компилятор и крестоблядский на разных физических машинах у них
ну будем честны, lexical_cast тоже по умолчанию использует глобальную локаль
http://liveworkspace.org/code/03f4d4b6e2921ecbced6c0e445d1ee25
(это если волшебный макрос не дефайнить)
defecate-plusplus 11.09.2012 20:06 # +2
тот же тест с std::to_string
Lure Of Chaos 11.09.2012 13:37 # +6
rat4 11.09.2012 21:39 # 0
roman-kashitsyn 12.09.2012 14:06 # +1
Удобно ведь писать экстеншены? :)
moderator 12.09.2012 14:51 # +2
roman-kashitsyn 12.09.2012 14:58 # +4
Это я вернулся и тебя разбанил
rat4 12.09.2012 15:24 # 0