-Поиск по дневнику

Поиск сообщений в rss_forum_sources_ru

 -Подписка по e-mail

 

 -Постоянные читатели

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 29.07.2007
Записей:
Комментариев:
Написано: 80




Форум на Исходниках.RU


Добавить любой RSS - источник (включая журнал LiveJournal) в свою ленту друзей вы можете на странице синдикации.

Исходная информация - http://forum.sources.ru.
Данный дневник сформирован из открытого RSS-источника по адресу http://forum.sources.ru/yandex.php, и дополняется в соответствии с дополнением данного источника. Он может не соответствовать содержимому оригинальной страницы. Трансляция создана автоматически по запросу читателей этой RSS ленты.
По всем вопросам о работе данного сервиса обращаться со страницы контактной информации.

[Обновить трансляцию]

Маразм программёров

Среда, 22 Июля 2020 г. 21:56 + в цитатник
ya2500: - Где ты взял эту часть кода?
- На StackOverflow
- Из ответа или из вопроса?

https://forum.sources.ru/index.php?showtopic=24&view=findpost&p=3834951


Метки:  

Маразм программёров

Среда, 22 Июля 2020 г. 21:55 + в цитатник
ya2500: Похоже, наш мир создан программистами:

- Частицы иногда ведут себя как волны.
- Обработчик квантовой физики взяли с другого проекта, поэтому взаимодействия на макро- и микроуровне происходят по разным законам.
- Фотону забыли прописать массу покоя, и он не может остановиться.
- Все электроны в мире - это ссылки на один и тот же электрон.
- При движении с большими скоростями начинаются лаги.
- Чтобы галактики правильно вращались, их на 80% заполнили невидимым инертным веществом.
- Чтобы Вселенная не схлопнулась из-за гравитации, пространство расширяет само себя. В будущем это может привести к проблемам, но пока работает.
- Предыдущие 2 пункта были временными костылями, но дожили до релиза.
- Падающее дерево не издаёт шум, если рядом нет никого, кто мог бы его услышать.

https://forum.sources.ru/index.php?showtopic=24&view=findpost&p=3834950


Метки:  

Можно ли как-то без временных переменных?

Среда, 22 Июля 2020 г. 21:53 + в цитатник
Qraizer:
Цитата OpenGL @
По-моему не появится никаких проблем, если разрешить передавать rvalue в параметры-неконстантные ссылки, которых бы не было в случае параметров-константных ссылок.
Когда-то в бородатых 90-ых так и было. Можно было по неконстантной ссылке, например в int&, передавать результаты выражений типа a+b. Компилеры писали варнинг, мол, будет заюзана временная переменная, но код генерить это им не мешало. В итоге в C++98 это отменили, ибо это отвращает программеров писать правильные контракты в прототипах функций. Мол, const означает не изменение функцией, его отсутствие означает выходной параметр. А так как временные объекты в качестве выходных параметров использовать невозможно, то вызывающая сторона явно что-то мутит и не знает, что творит.

Добавлено
Цитата JoeUser @
Пусть будет тут вторая часть истории с хэпиэндом
Ух ты. Кто-то ещё пользует бинды...

https://forum.sources.ru/index.php?showtopic=419210&view=findpost&p=3834949


Метки:  

Можно ли как-то без временных переменных?

Среда, 22 Июля 2020 г. 21:25 + в цитатник
JoeUser: Пусть будет тут вторая часть истории с хэпиэндом :)

    #include
    #include
    #include
    //------------------------------------------------------------------------------
    using CallbackType = std::function;
    // ------------------------------------------------------------------------------
    class Karbofos {
    CallbackType Call;
    public:
    const std::string Name = "Карбофос";
    void SetCallback(CallbackType C) {
    Call = std::move(C);
    }
    void Run() {
    if (Call)
    Call(this, 1, 20);
    std::cout << "- Не продам!\n";
    }
    };
    //------------------------------------------------------------------------------
    class Shef {
    public:
    void Entreaty(void* c, int a, int b) {
    std::cout << "- " << ((Karbofos*)c)->Name
    << ", продай слона за "
    << a << "." << b << "р ?\n";
    }
    };
    //------------------------------------------------------------------------------
    int main() {
    Karbofos K;
    Shef S;
    K.SetCallback(std::bind(
    &Shef::Entreaty, &S,
    std::placeholders::_1,
    std::placeholders::_2,
    std::placeholders::_3)
    );
    K.Run();
    return 0;
    }

https://forum.sources.ru/index.php?showtopic=419210&view=findpost&p=3834948


Метки:  

Можно ли как-то без временных переменных?

Среда, 22 Июля 2020 г. 21:21 + в цитатник
OpenGL:
Цитата Wound @
Во первых, чтоб применять move - Нужен rvalue, т.е. функция должна принимать что то типа:

Не обязательно.
    void MyClass::set_something(std::vector value) // Передача по значению
    {
    this->something = std::move(value); // Переместит, лишних копирований не будет
    }


Цитата Qraizer @
Поэтому Стандарт запрещает передавать rvalue под такие параметры, ибо они, являясь временными объектами, по возврату из функции просто не дают возможности этими результатами воспользоваться, ибо они будут разрушены на ближайшей ; (ну, почти всегда на ближайшей), а значит программист практически наверняка облажался, написав такую конструкцию.

По мне так это просто недосмотр языка. По-моему не появится никаких проблем, если разрешить передавать rvalue в параметры-неконстантные ссылки, которых бы не было в случае параметров-константных ссылок.

https://forum.sources.ru/index.php?showtopic=419210&view=findpost&p=3834947


Метки:  

Имя устройства физического диска

Среда, 22 Июля 2020 г. 12:00 + в цитатник
Jin X:
Цитата Qraizer @
Вот тут можно посмотреть на дикую смесь C и Плюсов, но он не даст полной инфы.
Там тоже ж SetupAPI.
Почему не даст?

https://forum.sources.ru/index.php?showtopic=419205&view=findpost&p=3834874


Метки:  

Можно ли как-то без временных переменных?

Среда, 22 Июля 2020 г. 11:57 + в цитатник
Wound:
Цитата JoeUser @
За-то я написал "если"

Ну сам std::move вообще не занимается ничем, кроме каста входящего значения в rvalue, так что вряд ли он там может быть с чем то связан. Вот например можно посмотреть псевдро-реализацию std::move в блоге Майерса, ну или почитать его книжку, там об этом написано.
http://scottmeyers.blogspot.com/2012/11/on...of-stdmove.html

https://forum.sources.ru/index.php?showtopic=419210&view=findpost&p=3834873


Метки:  

Можно ли как-то без временных переменных?

Среда, 22 Июля 2020 г. 11:51 + в цитатник
JoeUser:
Цитата Wound @
Ну тот код который привел ты - у тебя там нет лямбд

За-то я написал "если" :)

https://forum.sources.ru/index.php?showtopic=419210&view=findpost&p=3834872


Метки:  

Можно ли как-то без временных переменных?

Среда, 22 Июля 2020 г. 11:42 + в цитатник
Wound:
Цитата JoeUser @
Пишут, что std::move как-то связан со списками захвата, если в качестве функции передается лямбда.

Ну тот код который привел ты - у тебя там нет лямбд :-?

https://forum.sources.ru/index.php?showtopic=419210&view=findpost&p=3834870


Метки:  

Можно ли как-то без временных переменных?

Среда, 22 Июля 2020 г. 11:27 + в цитатник
JoeUser: Wound, я бегло глянул в сети, не вдавался в подробности. Пишут, что std::move как-то связан со списками захвата, если в качестве функции передается лямбда.

И вааще, Киля, ты должен оценить сейчас всю глубину глубин

user posted image

https://forum.sources.ru/index.php?showtopic=419210&view=findpost&p=3834867


Метки:  

Можно ли как-то без временных переменных?

Среда, 22 Июля 2020 г. 10:50 + в цитатник
Wound: Ну и к слову вопрос еще состоит в том - можно ли перемещать указатели? У меня стойкое ощущение что указатель - это lvalue, а никак не rvalue.
Майерса год-два назад читал, там про это все написано.

Добавлено
Как мне помнится
lvalue - это то, что живет на следующей строчке, после его объявления.
rvalue - это то, что не живет на следующей строчке, после его объявления.

Что то типа там:
    int a = 5; //! a = lvalue, 5 - rvalue
    SomeClass b = a.getSomeClass(); //! b - lvalue, a.getSomeClass() - rvalue(если возвращается копия объекта, а не какой нибудь кусок памяти в куче).
    void SomeFunc(std::string str); //! str - rvalue, потому что живет не дольше SomeFunc
    void SomeFunc2(const std::string& str)//! str - lvalue, потому что живет дольше SomeFunc

Это я так по памяти воспроизвел. Значит и указатель на функцию это 100% lvalue, и std::move, просто скопирует побайтно объект, никаких семантик перемещения не будет.

Добавлено
Разве что у тебя там std::function сможет переместится, что то я его проглядел, но это уже надо его конструкторы смотреть - если есть перемещающий, возможно и можно.

https://forum.sources.ru/index.php?showtopic=419210&view=findpost&p=3834866


Метки:  

Можно ли как-то без временных переменных?

Среда, 22 Июля 2020 г. 10:37 + в цитатник

Метки:  

Можно ли как-то без временных переменных?

Среда, 22 Июля 2020 г. 10:36 + в цитатник
Wound:
Цитата JoeUser @
На сколько тут std::move нужен?

Без понятия, тонкости реализации я уже забыл, это пусть лучше Qraizer просветлит.
Но как по мне - он там нахрен не нужен.
Во первых, чтоб применять move - Нужен rvalue, т.е. функция должна принимать что то типа:
    void SetCallback(CallbackType&& B, CallbackType&& E) {
    Begin = std::move(B);
    End = std::move(E);
    }

Во вторых, даже если все будет так - никаких гарантий нет что будет реализовано перемещение.
В третьих, даже если ты явно не напишешь std::move, а по логике он там применим, компилятор сам выполнит перемещение(соптимизирует и выполнит)
В четвертых - у тебя там не просто указатели на какие то переменные, а указатели на функцию, не думаю что оно там будет что то перемещать, хотя ньюансы не знаю.

ИМХО - это лишнее.

https://forum.sources.ru/index.php?showtopic=419210&view=findpost&p=3834864


Метки:  

goto vs break & continue

Среда, 22 Июля 2020 г. 10:14 + в цитатник
Wound:
Цитата JoeUser @
Это всем апологетам RAII так хочется видеть. Потом начинаются конструкторы, деструкторы, смартпоинтеры ...а у меня всего лишь скромная метка для goto. Ты просто еще не проникся дзеном простоты, не понимаешь всего величия и фундаментальности безусловных переходов!

Это все можно сравнить со стиркой. У тебя подход какой - ты постирал все вещи, что были прям кучей - носки/белое/черное/цветное/джинсы/футболки там всякие - вытащил всю эту кучу из машинки, и бросил на полку. Вот твой подход. Дальше придет время взять шмотку - будешь рыться искать.
Подход RAII - во первых стирать все по отдельности носки - отдельно, белое отдельно от черного, цветное отдельно, затем после стирки ты все вещи достаешь, выглаживаешь, и раскладываешь по полочкам, футболки к футболкам, брюки к брюкам, аккуратно сортируешь носки, засовываешь носок в носок(чтоб потом парные не искать), после чего раскладываешь на полочку.

Вот примерно этим отличается твой подход от подхода RAII. Да в случае с RAII - приходится сортировать и выглаживать, чтоб потом пришел - взял что тебе нужно, пошел. А с твоим подходом - оно то с виду может и быстрее взять кучу одежды с машинки и кидануть на полку, только потом ты всеравно потратишь то же самое время, а то и больше - на поиск вещи и на ее глажку. Не понимаю как можно не понимать столь очевидных вещей. :-?
Написание даже полноценного RAII класса выходит быстрее - чем выделение ресурса руками, потом проверка всех условий, потом переход по метке(это же еще понять нужно где ее правильно воткнуть надо будет, чтоб и лишней не было и мало не было), и освобождение его руками.

https://forum.sources.ru/index.php?showtopic=362619&view=findpost&p=3834863


Метки:  

Можно ли как-то без временных переменных?

Среда, 22 Июля 2020 г. 10:07 + в цитатник
JoeUser: Киля, ну прости! Спасибо.

Добавлено
Кстати, есть еще совет вот такой:
    void SetCallback(CallbackType B, CallbackType E) {
    Begin = std::move(B);
    End = std::move(E);
    }

На сколько тут std::move нужен?

https://forum.sources.ru/index.php?showtopic=419210&view=findpost&p=3834862


Метки:  

goto vs break & continue

Среда, 22 Июля 2020 г. 09:48 + в цитатник
Gonarh:
Цитата Qraizer @
Если я смотрю код, и он прекрасен, значит всё было сделано правильно.

Субъективизм.

Добавлено
Цитата Qraizer @
Добавлено
:jokingly: А если он ещё и работает...

А вот это правильно

https://forum.sources.ru/index.php?showtopic=362619&view=findpost&p=3834860


Метки:  

Можно ли как-то без временных переменных?

Среда, 22 Июля 2020 г. 09:47 + в цитатник
Wound:
Цитата JoeUser @
Как мне в SetCallback передать сразу указатели на функции, без использования временных переменных?

У тебя прям талант придумывать себе проблемы. Убери указатели вообще у CallbackType. Зачем ты их туда написал? С какой целью ты их туда написал? Сам CallbackType - не является разве указателем(ну вернее он является std::function, но сам шаблонный параметр то указатель на функцию)?
Ты у себя прилепил указатель на указатель на функцию и спрашиваешь такие вещи.

https://ideone.com/miVYwD
    #include
    #include
    // ------------------------------------------------------------------------------
    using CallbackType = std::function;
    // ------------------------------------------------------------------------------
    class Karbofos {
    CallbackType Begin = nullptr;
    CallbackType End = nullptr;
    public:
    const std::string Name = "Карбофос";
    void SetCallback(CallbackType B, CallbackType E) {
    Begin = B;
    End = E;
    }
    void Run() {
    if (Begin) (Begin)(this);
    std::cout << "- Не отдам, слон - мой!\n";
    if (End) (End)(this);
    }
    };
    // ------------------------------------------------------------------------------
    void Shef(void* i) {
    std::cout << "- Стой, живодер " << ((Karbofos*)(i))->Name << "!\n";
    }
    // ------------------------------------------------------------------------------
    void Kollega(void* i) {
    std::cout << "- " << ((Karbofos*)(i))->Name << ", ты немец и контрабандист!\n";
    }
    // ------------------------------------------------------------------------------
    int main() {
    Karbofos Object;
    //CallbackType S = Shef;
    //CallbackType K = Kollega;
    Object.SetCallback(Shef,Kollega);
    Object.Run();
    return 0;
    }


Добавлено
Цитата JoeUser @
На SO залепили на умных указателях. Ну выход. Ну почему просто так нельзя как-то?

Ну там днари походу сидят, дергают на свой рейтинг и пишут всякий оцтой. Раньше там чаще можно было встретить полезной информации. Сейчас приходится перелопачивать тонну какого то шлака, чтоб найти вменяемый ответ.

Добавлено
Цитата JoeUser @
Блин, переработался я new CallbackType(), решает ... осталось как-то возможную утечку памяти подпилить хитрыми указателями.

"...Таких извращений Иван не видал!..." © Красная Плесень.

https://forum.sources.ru/index.php?showtopic=419210&view=findpost&p=3834859


Метки:  

TreeView

Среда, 22 Июля 2020 г. 08:20 + в цитатник
E.A.: Исправил, без NM_CLICK
    if ((nmh->code == TVN_SELCHANGED) || (nmh->code == NM_SETFOCUS) || (nmh->code == NM_KILLFOCUS))

Все работает так как нужно.
Спасибо

https://forum.sources.ru/index.php?showtopic=419174&view=findpost&p=3834855


Метки:  

Можно ли как-то без временных переменных?

Среда, 22 Июля 2020 г. 07:14 + в цитатник
JoeUser: На SO залепили на умных указателях. Ну выход. Ну почему просто так нельзя как-то?

https://forum.sources.ru/index.php?showtopic=419210&view=findpost&p=3834852


Метки:  

Можно ли как-то без временных переменных?

Среда, 22 Июля 2020 г. 05:53 + в цитатник
JoeUser: Всем привет!

Накидал небольшой примерчик, и по нему есть вопрос:

    #include
    #include
    // ------------------------------------------------------------------------------
    using CallbackType = std::function;
    // ------------------------------------------------------------------------------
    class Karbofos {
    CallbackType *Begin = nullptr;
    CallbackType *End = nullptr;
    public:
    const std::string Name = "Карбофос";
    void SetCallback(CallbackType *B, CallbackType *E) {
    Begin = B;
    End = E;
    }
    void Run() {
    try {
    if (Begin) (*Begin)(this);
    std::cout << "- Не отдам, слон - мой!\n";
    if (End) (*End)(this);
    } catch(const std::bad_function_call& E) {
    std::cout << "Хреновый вызов: " << E.what() << '\n';
    } catch(...) {
    std::cout << "Случилось страшное!\n";
    }
    }
    };
    // ------------------------------------------------------------------------------
    void Shef(void* i) {
    std::cout << "- Стой, живодер " << ((Karbofos*)(i))->Name << "!\n";
    }
    // ------------------------------------------------------------------------------
    void Kollega(void* i) {
    std::cout << "- " << ((Karbofos*)(i))->Name << ", ты немец и контрабандист!\n";
    }
    // ------------------------------------------------------------------------------
    int main() {
    Karbofos Object;
    CallbackType S = Shef;
    CallbackType K = Kollega;
    Object.SetCallback(&S,&K);
    Object.Run();
    return 0;
    }

Как мне в SetCallback передать сразу указатели на функции, без использования временных переменных?

Добавлено
Блин, переработался я new CallbackType(), решает ... осталось как-то возможную утечку памяти подпилить хитрыми указателями.

https://forum.sources.ru/index.php?showtopic=419210&view=findpost&p=3834849


Метки:  

Поиск сообщений в rss_forum_sources_ru
Страницы: 2628 ... 2383 2382 [2381] 2380 2379 ..
.. 1 Календарь