результат выполнения в этой структуре.
Меня очень сильно напрягает что void функция неявно меняет данные. Скажите, Прата норм предлагает или есть другие, более хорошие варианты?
void rect_to_polar(const rect * pxy, polar * pda);
Правильно напрягает В С++ это неправильно
Возвращать по значению
Посмотрите на сишный код... Вам придётся на него много ещё смотреть.
Структуру и так можно возвращать: http://c-faq.com/struct/passret.html
Но встречается повсеместно :)
Надо вернуть результат из функции.
Ну иногда это предлагается как оптимизация ещё
ну не всегда
Ну там оптимизация, чтоб избежать копирования структуры. Я в-целом только за такое, но я бы хотела избежать неявных изменений данных.
В коде до 11го стандарта?)
В приведенном примере функции можно.
RVO в 2003 вижаке работало
Где оптимизация, у Прата? В С++, если возвращать по значению, тоже оптимизация. Без копий
Копирования при возврате больше нет, эта оптимизация обязательна по стандарту по-моему, так что руками больше так делать не надо.
Рво гарантировано с 17-го стандарта. Что не всегда? Так можно много чего сказать
Для рво нрво есть условия
Естественно. И что? Смысл об этом говорить
"Стандарт не читай — сразу отвечай!"
Чтобы избежать изменений надо передать как ссылки на константы либо как указатели на константы (лучше ссылки, конечно).
Ну видимо смысл, что при невыполнении условий не работает рво
Шок-контент. Толку от того, что ты здесь это сказал? Или, может, думаешь, что люди, которые говорят об RVO не знают этого?
Зачем говорить что избегание копирования можно не делать благодаря рво, если понимаешь, что оно не всегда работает, такой посыл
Что то не пойму я о чем ты толкуешь. Вот есть кусок памяти (массив структур). Проходим по нему функцией и как-то меняем. Все, конец истории, никаких копирований, никаких возвратов.
Так сделай, чтобы работало. Просто возьми и соблюди условия. Вот от твоего комментария пользы нет никакого
Настя хочет этого избежать
Ну ёпт да все ж так просто
А зачем? Это же не. ФП с иммутабельными структурами.
Но, понял в общем.
https://habr.com/ru/company/yandex/blog/522900/ ну например тут советуют поступить ровно тем методом, что обычно является преждевременной оптимизацией, и да были замеры и тд и тп. и что-то как-то не до рво было и переписывание под рабочее рво
На самом деле, это нормально. Альтернатива ренджи, алгоритмы (из stl). Смысл происходящего - у тебя есть коллекция и ты как-то меняешь в ней данные. Это работает примерно как apply в пандах. Обычно такой работы с сырыми указателями стараются избегать в C++, но тут скорее наработка интуиций, которые помогут в будущем.
Что такое панды? 😬
Спасибо. Я думаю что это Сишный подход в чистом (в плохом смысле это го слова) виде. В С++ я предполагаю что и структура и метод будут в одном классе и такой код писать не придется
Python pandas
Ну, я не говорю, что рво является серебряной пулей. У передачи через указатели есть свои юзкейсы, выше они, да. Но в целом подход не применяется в С++, да и вью над массивом не совсем то же, что и out-параметр через указатель
Да, старый добрый C.
Не стоит делать предположений относительно ООП в C++, оно необычное
В плохом смысле необычное?
Так я тоже признаю, что сначала надо определить, что выхода нет, потом писать такие вещи
Нет, в смысле C++ может в java-like ООП, но это неправильный подход для С++
Обсуждают сегодня