WTF-code

 
1 2 3
+
-
edit
 

Mishka

модератор
★★★

sabakka> Ситуация

А чего ты взял итераторы тогда для вектора, а не просто int и []? :P
 6.06.0

Mishka

модератор
★★★

digger> Эти итераторы гадкие тем,что не дебагируются пошагово,как традиционные циклы while, тем более последнее выражение.
В смысле? :) дебагируются, хотя менее удобно. Но это к разработчикам компиляторов. :P

А последнее выражение — это boost. Откомпили библиотеку в дебаг режиме и уже будет намного проще.
 6.06.0
+
-
edit
 
digger> Эти итераторы гадкие тем,что не дебагируются пошагово,как традиционные циклы while, тем более последнее выражение.
Дебажатся так же как и любой другой код. Вообще STL и ему подобные TL полностью состоит из встраиваемого (inline) кода. Ситуацию, при которой дебаггер отказывается заходить туда, мне лично тяжело представить. Может быть опция какая-нибудь, типа "пропускать STL код при трассировке".

sabakka>> Ситуация
Mishka> А чего ты взял итераторы тогда для вектора, а не просто int и []? :P
Тут последовательный доступ. Использовать operator[](size_t index) как-то некрасиво.
Воздух выдержит только тех, Только тех, кто верит в себя, Ветер дует туда, куда Прикажет тот, кто верит в себя.  
+
-
edit
 

Mishka

модератор
★★★

sabakka> Тут последовательный доступ. Использовать operator[](size_t index) как-то некрасиво.
А какая разница? Просто ты в одном случае частично пошёл на поводу абстрактности, а в другом нет. :)
 6.06.0
US Сергей-4030 #21.09.2011 01:12  @sabakka#03.09.2011 23:47
+
-
edit
 

Сергей-4030

исключающий третье
★★
админ. бан
sabakka> Ситуация


А в чем проблема? Вызовы уродские, а так - нормально. У меня сплошь и рядом такое бывает:

code java
  1. out.append(
  2.     StringUtils.toString(
  3.               table.joins(),
  4.               ", ",
  5.               new TypeConvertor<JoinedField, String>(){
  6.                         public String getValue(JoinedField field) {
  7.                                 return "index"+field.getKey();
  8.                         }
  9.               },
  10.               new Filter<JoinedField>(){
  11.                         public boolean include(JoinedField attr) {
  12.                                 return attr.isCached();
  13.                         }
  14.               }
  15.     )
  16. );


toString - это абстрактный итератор, продуцирующий строковое представление списка. Первый параметр - собственно массив, который будет напечатан в список, второе - класс для перевода элементов массива в String ( toString() не работает, потому, что нужны разные адаптеры для разных применений), третий - фильтр, определяет, какие элементы будут включены.

Это совершенно реальный код. Более того, в этом моем модуле (это генератор UI базирующийся на SQL описании таблицы) - такого сплошь и рядом, кучи целые. :) Конечно, джавовские конструкции для таких дел не очень хороши, ну да чего поделаешь.
 13.0.782.22013.0.782.220
RU sabakka #21.09.2011 02:25  @Сергей-4030#21.09.2011 01:12
+
-
edit
 
Mishka>> А какая разница? Просто ты в одном случае частично пошёл на поводу абстрактности, а в другом нет. :)
Разница большая. При последовательном доступе нужно использовать единый для всех итераторов (и для Bidit и для Ranit) механизм. Так правильно! Так будет легче, например, поменять тип конейтнера (и соотв. итератора) или же завернуть вашу код в шаблонную ф-цию, которой будут скармливать контейнеры или итераторы.

sabakka>> Ситуация
Сергей-4030> А в чем проблема? Вызовы уродские, а так - нормально.
Ну ... чтобы понять, что значит
code cpp
  1. std::bind2nd(std::mem_fun1(&Object::func), 2)

... нужно некоторое время

Сергей-4030> У меня сплошь и рядом такое бывает: ... Это совершенно реальный код. Более того, в этом моем модуле (это генератор UI базирующийся на SQL описании таблицы) - такого сплошь и рядом, кучи целые. :) Конечно, джавовские конструкции для таких дел не очень хороши, ну да чего поделаешь.
Но тут всё не так уж заумно. Да и случай не такой тривиальный, как мой. Вот что мне нравится в Java - возможность объявления безымянных функторов во время передачи их в другие ф-ции. Такое только в C++00x появилось.
Воздух выдержит только тех, Только тех, кто верит в себя, Ветер дует туда, куда Прикажет тот, кто верит в себя.  
+
-
edit
 

Mishka

модератор
★★★

sabakka> Разница большая. При последовательном доступе нужно использовать единый для всех итераторов (и для Bidit и для Ranit) механизм. Так правильно! Так будет легче, например, поменять тип конейтнера (и соотв. итератора) или же завернуть вашу код в шаблонную ф-цию, которой будут скармливать контейнеры или итераторы.

Так и знал, что про замену контейнера скажешь. :F А следующий шаг не сделал. Функцию класса можно тоже передать параметром. Можно даже в темплейт. Ещё более общий код получается.
 6.06.0
+
-
edit
 

Balancer

администратор
★★★★★
Этот кусок сделал мой день:
for (final int attempt = 0; attempt < retryCount; retryCount++)
// LexX - Juick
 
 
+
-1
-
edit
 

Mishka

модератор
★★★

Для любителей плюшек. :)

Что напечатает код (без пробования :) на компиляторе):
code c++
  1. #include <iostream>
  2.  
  3. class Foo
  4. {
  5.   public:
  6.     double One( long inVal )
  7.     { return inVal; }
  8.     double Two( long inVal )
  9.     { return 2 * inVal; }
  10. };
  11.  
  12.  
  13. int main( int argc, char* argv[ ] )
  14. {
  15.   double ( Foo::*memPtr ) ( long ) = &Foo::One;
  16.  
  17.   Foo aFoo;
  18.  
  19.   double res = ( aFoo.*memPtr )( 2 );
  20.  
  21.  
  22.   char* ptr = 0;
  23.  
  24.  
  25.   std::cout << "Sizeof( char* ) = " << sizeof( ptr ) << std::endl;
  26.   std::cout << "Sizeof( memPtr ) = " << sizeof( memPtr ) << std::endl;
  27.   std::cout << "Res = " << res << std::endl;
  28.  
  29.   return 0;
  30. }
 6.06.0

AXT

инженер вольнодумец
★☆
Mishka> Для любителей плюшек. :)
Mishka> Что напечатает код (без пробования :) на компиляторе):

Честно, без запуска; подразумевается 32-битка:

4
хзчто, но скорее всего 8
2
... так пускай наступает на нас холодным рассветом новый день ...  7.0.17.0.1

Mishka

модератор
★★★

AXT> Честно, без запуска; подразумевается 32-битка:

Пусть. :)

AXT> 4
Да.
AXT> хзчто, но скорее всего 8
8, правда у MSVC 6.0 был оптимизирующий ключ (который был по умолчанию всегда включён), который разрешал 4. Из-за чего было много головной боли. :F

AXT> 2
Да.

Просто пример, который показывает, что даже указатели могут иметь разный размер. :F На 64 битакх будет 8, 16, 2.

PS Не совсем прав — размер указателя на функцию-члена класса тоже оставлен на выбор создателю компилятора. Можно применить схему, когда будет не два указателя. :)
 6.06.0

AXT

инженер вольнодумец
★☆
Mishka> Просто пример, который показывает, что даже указатели могут иметь разный размер. :F На 64 битакх будет 8, 16, 2.

Это знатные грабли, да. Но про них ЕМНИМС Страуструп таки сподобился написать в 3-м издании. А вот то, что разность указателей не обязана влезать в int, и ptrdiff_t придуман не просто так — ни в одном основополагающем учебнике не написано, насколько я знаю :(

Mishka> PS Не совсем прав — размер указателя на функцию-члена класса тоже оставлен на выбор создателю компилятора. Можно применить схему, когда будет не два указателя. :)

Хм, а как? Если у класса есть виртуальные функции и переопределяющие их наследники, например?
... так пускай наступает на нас холодным рассветом новый день ...  7.0.17.0.1

Mishka

модератор
★★★

AXT> Хм, а как? Если у класса есть виртуальные функции и переопределяющие их наследники, например?

Три, например. :)
 6.06.0
RU Алдан-3 #13.10.2011 23:14
+
-
edit
 

Алдан-3

аксакал
★★☆
Код кодом, а меня вот сегодня комментарий напугал.

# {WTF}. КОСТЫЛИ ЗАБИТЫЕ ПОСЛЕ ПЕРЕХОДА С *** НА ***!!! ТРОГАТЬ НА СВОЙ СТРАХ И РИСК.
 


{WTF} это слово финансы.
Особенно его раздражало то, что его постоянно спрашивали, чем он так раздражен.  7.0.17.0.1
RU Balancer #14.10.2011 00:03  @Алдан-3#13.10.2011 23:14
+
+1
-
edit
 

Balancer

администратор
★★★★★
Алдан-3> Код кодом, а меня вот сегодня комментарий напугал.

Сегодня попалось на veet - Juick :)

Копаюсь в коде прошивки одного девайса, доставшемся "в наследство" от прошлого разработчика. Дохожу до обработчика прерывания, который писан на ассемблере, и вижу божественный комментарий:
code 6502acme
  1.  ...
  2.  POP R16
  3.  POP R18
  4.  RETI ;рети-рети интеррапт, через шины данных тракт, через память, через порт, возвращайся в главный код

Чувствую, отладка будет веселой)
 
 
RU Алдан-3 #16.10.2011 17:26
+
-
edit
 

Алдан-3

аксакал
★★☆
Во, WTF?! код личного изготовления. Хвастаюсь :D

code text
  1. $str= mb_convert_encoding($str, "UTF-8", "UTF-8");


Причина: в данных встречается мусор, регулярки выпадают с криками PREG_BAD_UTF8_ERROR.

mb_convert_encoding строки из utf8 в utf8 же непонятный мусор тупо выкидывает, регулярки начинают проходить.

Наверняка можно сделать по умному, если сесть и подумать. Но заказчик просит по быстрому :)
Особенно его раздражало то, что его постоянно спрашивали, чем он так раздражен.  7.0.17.0.1
RU Balancer #16.10.2011 18:50  @Алдан-3#16.10.2011 17:26
+
-
edit
 

Balancer

администратор
★★★★★
Алдан-3> mb_convert_encoding строки из utf8 в utf8 же непонятный мусор тупо выкидывает, регулярки начинают проходить.

А iconv с модификатором //TRANSLIT или //IGNORE?
 
RU Алдан-3 #16.10.2011 19:16  @Balancer#16.10.2011 18:50
+
-
edit
 

Алдан-3

аксакал
★★☆
Balancer> А iconv

Хм

Balancer> с модификатором //TRANSLIT

Ваще не помогает


Balancer> или //IGNORE?

Да,
$str=iconv("UTF-8", "UTF-8//IGNORE", $str);

Тоже помогает.
Особенно его раздражало то, что его постоянно спрашивали, чем он так раздражен.  7.0.17.0.1
+
-
edit
 

Balancer

администратор
★★★★★
WTF-code программирование
Хороший такой добрый WTF-code :)


// Транслировано с juick.com
 
+
-
edit
 
Mishka> Для любителей плюшек. :)
Mishka> Что напечатает код (без пробования :) на компиляторе):

Не определено. Сам по себе стандарт не регламентирует ни размер указателя (который вообще-то зависит от платформы), ни размер указателя на функцию-член.
Воздух выдержит только тех, Только тех, кто верит в себя, Ветер дует туда, куда Прикажет тот, кто верит в себя.  
+
-
edit
 
Вот вам неплохой тест на знание стандарта С++.


C++ quiz


take your free online C++ quiz here

// www.mycppquiz.com
 

Ощути себя дилетантом.
Воздух выдержит только тех, Только тех, кто верит в себя, Ветер дует туда, куда Прикажет тот, кто верит в себя.  
+
-
edit
 

Nikita

аксакал

sabakka> Ощути себя дилетантом.

Ощутить не получилось, но несколько тонких моментов - да, имеются.

Но в целом средненько. Много вопросов на бесполезные в реальной практике моменты. Имеются вопросы в духе "а когда у швейцара умерла бабушка". И - что самое существенное - покрыты далеко не все ключевые аспекты стандарт: практически нет вопросов про шаблоны, про указатели на члены, стандартную библиотеку и т.д.
Учитесь читать.  9.09.0
RU Алдан-3 #10.01.2012 07:14  @Balancer#29.12.2011 03:40
+
-
edit
 

Алдан-3

аксакал
★★☆
Balancer> Хороший такой добрый WTF-code :)

А что, понятно же что делает :)

Непонятно зачем, похоже на недоподчищенное тяжкое наследие кровавого режима прошлого.
Особенно его раздражало то, что его постоянно спрашивали, чем он так раздражен.  9.0.19.0.1
RU Balancer #10.01.2012 10:36  @Алдан-3#10.01.2012 07:14
+
-
edit
 

Balancer

администратор
★★★★★
Алдан-3> Непонятно зачем

Не нужно искать смысл в коде программистов, практикующих копипаст :)
 
+
-
edit
 
Nikita> Но в целом средненько. Много вопросов на бесполезные в реальной практике моменты. Имеются вопросы в духе "а когда у швейцара умерла бабушка".
Совершенно верно. Тем не менее именно такие вопросы в первую очередь задают на собеседованиях при приёме на работу. ;)

Nikita> И - что самое существенное - покрыты далеко не все ключевые аспекты стандарт: практически нет вопросов про шаблоны, про указатели на члены, стандартную библиотеку и т.д.
Тем не менее 79 вопросов с кучей скользких мест. Есть и другие тесты.
Воздух выдержит только тех, Только тех, кто верит в себя, Ветер дует туда, куда Прикажет тот, кто верит в себя.  
1 2 3

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru