- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
void f(bool *ok = 0)
{
//тут возникла ошибка
if (ok)
*ok = false;
return;
}
//далее в коде
bool ok = false;
f(&ok);
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+62
void f(bool *ok = 0)
{
//тут возникла ошибка
if (ok)
*ok = false;
return;
}
//далее в коде
bool ok = false;
f(&ok);
не, ну заебок, чо
Fike 05.03.2015 14:35 # +6
roman-kashitsyn 05.03.2015 14:48 # 0
gost 05.03.2015 15:06 # +2
Vasiliy 05.03.2015 15:08 # 0
myaut 05.03.2015 15:13 # +2
fixed
gost 05.03.2015 16:16 # −3
bormand 05.03.2015 17:20 # +3
Abbath 05.03.2015 15:39 # +1
wvxvw 05.03.2015 18:19 # 0
absolut 06.03.2015 07:06 # 0
absolut 08.03.2015 20:41 # 0
TarasB 08.03.2015 21:23 # 0
absolut 09.03.2015 07:42 # +2
TarasB 09.03.2015 11:51 # 0
absolut 06.03.2015 07:36 # +4
roman-kashitsyn 10.03.2015 09:14 # +2
bormand 10.03.2015 09:18 # 0
roman-kashitsyn 10.03.2015 09:51 # +2
bormand 10.03.2015 10:33 # 0
bormand 10.03.2015 15:56 # +1
roman-kashitsyn 10.03.2015 15:59 # +1
bormand 10.03.2015 16:12 # 0
roman-kashitsyn 10.03.2015 16:16 # 0
bormand 10.03.2015 16:29 # 0
3.14159265 10.03.2015 21:50 # 0
LispGovno 10.03.2015 21:57 # 0
3.14159265 10.03.2015 22:48 # 0
Я-то домыслил что метаданные разных типов заворачиваются, при успехе/ошибке, и какой профит с этого?
roman-kashitsyn 10.03.2015 23:08 # 0
3.14159265 11.03.2015 00:43 # 0
>Expected
>public T get() {
А не напоминает ли Вам эта конструкция FutureTask?
А еще за юнион "что в c++11 можно и нетривиальную фигню в юнион засунуть. Годная фича" если не трудно поясните.
roman-kashitsyn 11.03.2015 00:50 # 0
Александреску так и сказал на конференции, что это в точности фьючерс, только синхронный и супер простой. Соответственно, работает в разы быстрее (говорит, раз в 10 насчитали).
> если не трудно поясните
До C++11 нельзя было в юнион класть объекты с нетривиальными конструкторами-деструкторами (не POD-ы). Теперь можно, но хранить теги типов и вызывать конструкторы-деструкторы извольте сами.
3.14159265 11.03.2015 01:26 # 0
Дык оверхеда на свитч потоков нету, конечно, и в кернеле время не тратится.
>До C++11 нельзя было в юнион класть объекты с нетривиальными конструкторами-деструкторами
Хренасе. Ну я понял в общем-то. Сишка — нет RAII, нет проблем.
LispGovno 11.03.2015 07:39 # 0
LispGovno 11.03.2015 07:56 # 0
roman-kashitsyn 11.03.2015 08:32 # 0
LispGovno 11.03.2015 22:20 # 0
А не знать о Эйзе из хаскеля - это глупо с его стороны
LispGovno 11.03.2015 07:36 # 0
bormand 11.03.2015 07:46 # 0
LispGovno 11.03.2015 07:55 # 0
> Do not redistribute.
Это все равно что:
Loki::Expected<std::exception>
bormand 11.03.2015 08:53 # 0
Кто-то когда-то соблюдал эти просьбы?
roman-kashitsyn 11.03.2015 11:42 # 0
kegdan 10.03.2015 09:36 # 0
и только человек-стол и лисп неделимы
laMer007 10.03.2015 19:47 # 0
roman-kashitsyn 10.03.2015 20:02 # 0
Далее придирки: объект поддерживает перемещение, но не имеет конструктора по-умолчанию. Т.е. есть состояние объекта, которое можно получить только перемещением. Кажется, это довольно странно - гораздо логичнее сделать замувленный объект эквивалентным сконструированному по-умолчанию. Тут он забыл вызвать деструктор ham перед тем, как записать t в spam. Если у нас объект не умеет в перемещение (только в копирование), то будет утечка ресурсов. Ну и деструктрор exception_ptr в rhs.ham для порядку тоже вызвать надо.
LispGovno 11.03.2015 22:26 # 0
wvxvw 10.03.2015 23:57 # 0
Я: Ну... а в какой структуре данных предполагается хранить историю изменений?
НО: Я вот тут в каком-то блоге нашел <класс из огромного фреймворка, который уже несколько лет не поддерживается>, но в блоге было написано, что в нем есть проблемы, поэтому я решил использовать две копии этого класса: одну для undo, а другую - для redo.
Как же оно все так сделано, что просто код нельзя писать, нужно обязательно там изолентой заклеить, тут напильником... Особенно порадовал самодельный gensym.
roman-kashitsyn 11.03.2015 00:43 # +1
LispGovno 11.03.2015 22:27 # 0
bormand 11.03.2015 22:31 # 0
Да всяко должны. Это ж, по сути, обычная херь-с-оператором-скобки посыпанная сахарком. Но пруф/опровержение искать лень.
LispGovno 11.03.2015 22:40 # 0
bormand 12.03.2015 06:39 # +1
Схуяли? Это потому что ты написал свой конструктор копирования, а конструктор перемещения не написал. Если же оба конструктора по дефолту генерятся - то почленно перемещает то, что можно переместить.
Вот, мувает захваченную херню: http://ideone.com/7jFVrC
LispGovno 12.03.2015 09:39 # 0
да ты придумал. нихрена он не мувает. вообщем блямбда мувает, а класс нет
LispGovno 12.03.2015 09:42 # 0
ну а это прямо обратный эффект лол
bormand 12.03.2015 10:04 # 0
Ну что там не мувается, няша :3 Дефолтовый конструктор правильно работает. Написал свой - отвечай за него сам.
Мы в ответе за тех, кого приручили.
LispGovno 12.03.2015 10:57 # 0
Свои говноопределения конструктора копирования убрать и норм мувается
LispGovno 12.03.2015 11:00 # 0
А вон в мув конструктора даже мувить члены не надо
bormand 12.03.2015 11:12 # +1
Надо. Ты посмотри, где объект то остался...Оно же shared_ptr не мувнуло, а дефолтконструктнуло.
a.a is not null 0
a is not null 1
laMer007 12.03.2015 18:55 # 0
bormand 12.03.2015 21:23 # 0
... в тех контекстах, в которых на это всем похуй. В остальных же без std::move перемещение не активируется.
> дефолтный перемещающий op= и mtor,
Вот этого не хватает, да. Не получается убить конструктор копий, оставив дефолтный перемещатор.
bormand 12.03.2015 21:50 # 0
bormand 12.03.2015 22:00 # 0
If the definition of a class X does not explicitly declare a move constructor, one will be implicitly declared as defaulted if and only if:
— X does not have a user-declared copy constructor,
— X does not have a user-declared copy assignment operator,
— X does not have a user-declared move assignment operator,
— X does not have a user-declared destructor, and
— the move constructor would not be implicitly defined as deleted.
kegdan 13.03.2015 00:02 # 0
bormand 12.03.2015 09:48 # 0
Всё там мувается, если руки не из ануса: http://ideone.com/TAOUDB
TarasB 12.03.2015 11:24 # 0
bormand 12.03.2015 11:27 # 0
TarasB 12.03.2015 13:12 # 0
bormand 12.03.2015 13:20 # 0
А выбора особо нету. Либо ты пишешь оба сам и полностью отвечаешь за их работу, либо пишешь один, а второй отваливается, либо ты ничего не пишешь, и получаешь почленное копирование/перемещение.
bormand 12.03.2015 13:27 # 0
TarasB 12.03.2015 14:56 # 0
bormand 12.03.2015 15:03 # 0
Если правильно следовать RAII - то нетривиальное копирование встречается очень редко и только в низкоуровневых классах (реализации смартпоинтеров и т.п.). Я когда игровой сервачок писал just for fun, у меня там в сотне классов был один деструктор, и тот от лени. А нетривиальных копирований/перемещений вообще не было.
TarasB 12.03.2015 15:59 # 0
bormand 12.03.2015 09:51 # 0
LispGovno 12.03.2015 10:00 # 0
Вообщет там указатель на инт и он замувился или скопировался и это разные вещи
bormand 12.03.2015 10:05 # 0
kegdan 12.03.2015 10:46 # 0
roman-kashitsyn 12.03.2015 10:47 # 0
kegdan 12.03.2015 10:50 # 0
roman-kashitsyn 12.03.2015 10:58 # 0
Страуструп полезен и довольно полон, но невозможно скучен. Издание по C++03 я ещё осилил, а вот до свежего по C++11 я ещё не добрался.
kegdan 12.03.2015 11:09 # 0
bormand 12.03.2015 11:16 # 0
Ну хер знает, я давно уже вижуалку не видел. Самые-самые последние вроде кошерны. Ниже 2013 точно не стоит юзать.
roman-kashitsyn 12.03.2015 11:17 # 0
Только ворнинги компиляции на максимум не забывай выкручивать.
bormand 12.03.2015 11:26 # 0
А вижуалка уже перестала ругаться на свои же либы на максимальных уровнях?
roman-kashitsyn 12.03.2015 12:14 # 0
laMer007 12.03.2015 18:41 # +1
3.14159265 13.03.2015 14:54 # 0
>>>какой нибудь цивинг?
>>>>>цивинг?
Запомни, ассемблер - это компилятор.
jenik15 25.08.2021 04:17 # 0