- 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);
не, ну заебок, чо
fixed
Я-то домыслил что метаданные разных типов заворачиваются, при успехе/ошибке, и какой профит с этого?
>Expected
>public T get() {
А не напоминает ли Вам эта конструкция FutureTask?
А еще за юнион "что в c++11 можно и нетривиальную фигню в юнион засунуть. Годная фича" если не трудно поясните.
Александреску так и сказал на конференции, что это в точности фьючерс, только синхронный и супер простой. Соответственно, работает в разы быстрее (говорит, раз в 10 насчитали).
> если не трудно поясните
До C++11 нельзя было в юнион класть объекты с нетривиальными конструкторами-деструкторами (не POD-ы). Теперь можно, но хранить теги типов и вызывать конструкторы-деструкторы извольте сами.
Дык оверхеда на свитч потоков нету, конечно, и в кернеле время не тратится.
>До C++11 нельзя было в юнион класть объекты с нетривиальными конструкторами-деструкторами
Хренасе. Ну я понял в общем-то. Сишка — нет RAII, нет проблем.
А не знать о Эйзе из хаскеля - это глупо с его стороны
> Do not redistribute.
Это все равно что:
Loki::Expected<std::exception>
Кто-то когда-то соблюдал эти просьбы?
и только человек-стол и лисп неделимы
Далее придирки: объект поддерживает перемещение, но не имеет конструктора по-умолчанию. Т.е. есть состояние объекта, которое можно получить только перемещением. Кажется, это довольно странно - гораздо логичнее сделать замувленный объект эквивалентным сконструированному по-умолчанию. Тут он забыл вызвать деструктор ham перед тем, как записать t в spam. Если у нас объект не умеет в перемещение (только в копирование), то будет утечка ресурсов. Ну и деструктрор exception_ptr в rhs.ham для порядку тоже вызвать надо.
Я: Ну... а в какой структуре данных предполагается хранить историю изменений?
НО: Я вот тут в каком-то блоге нашел <класс из огромного фреймворка, который уже несколько лет не поддерживается>, но в блоге было написано, что в нем есть проблемы, поэтому я решил использовать две копии этого класса: одну для undo, а другую - для redo.
Как же оно все так сделано, что просто код нельзя писать, нужно обязательно там изолентой заклеить, тут напильником... Особенно порадовал самодельный gensym.
Да всяко должны. Это ж, по сути, обычная херь-с-оператором-скобки посыпанная сахарком. Но пруф/опровержение искать лень.
Схуяли? Это потому что ты написал свой конструктор копирования, а конструктор перемещения не написал. Если же оба конструктора по дефолту генерятся - то почленно перемещает то, что можно переместить.
Вот, мувает захваченную херню: http://ideone.com/7jFVrC
да ты придумал. нихрена он не мувает. вообщем блямбда мувает, а класс нет
ну а это прямо обратный эффект лол
Ну что там не мувается, няша :3 Дефолтовый конструктор правильно работает. Написал свой - отвечай за него сам.
Мы в ответе за тех, кого приручили.
Свои говноопределения конструктора копирования убрать и норм мувается
А вон в мув конструктора даже мувить члены не надо
Надо. Ты посмотри, где объект то остался...Оно же shared_ptr не мувнуло, а дефолтконструктнуло.
a.a is not null 0
a is not null 1
... в тех контекстах, в которых на это всем похуй. В остальных же без std::move перемещение не активируется.
> дефолтный перемещающий op= и mtor,
Вот этого не хватает, да. Не получается убить конструктор копий, оставив дефолтный перемещатор.
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.
Всё там мувается, если руки не из ануса: http://ideone.com/TAOUDB
А выбора особо нету. Либо ты пишешь оба сам и полностью отвечаешь за их работу, либо пишешь один, а второй отваливается, либо ты ничего не пишешь, и получаешь почленное копирование/перемещение.
Если правильно следовать RAII - то нетривиальное копирование встречается очень редко и только в низкоуровневых классах (реализации смартпоинтеров и т.п.). Я когда игровой сервачок писал just for fun, у меня там в сотне классов был один деструктор, и тот от лени. А нетривиальных копирований/перемещений вообще не было.
Вообщет там указатель на инт и он замувился или скопировался и это разные вещи
Страуструп полезен и довольно полон, но невозможно скучен. Издание по C++03 я ещё осилил, а вот до свежего по C++11 я ещё не добрался.
Ну хер знает, я давно уже вижуалку не видел. Самые-самые последние вроде кошерны. Ниже 2013 точно не стоит юзать.
Только ворнинги компиляции на максимум не забывай выкручивать.
А вижуалка уже перестала ругаться на свои же либы на максимальных уровнях?
>>>какой нибудь цивинг?
>>>>>цивинг?
Запомни, ассемблер - это компилятор.