170 похожих чатов

Прата предлагает функцию, которая получает указатель на структуру и возвращает

результат выполнения в этой структуре.

Меня очень сильно напрягает что void функция неявно меняет данные. Скажите, Прата норм предлагает или есть другие, более хорошие варианты?
void rect_to_polar(const rect * pxy, polar * pda);

41 ответов

6 просмотров

Правильно напрягает В С++ это неправильно

Посмотрите на сишный код... Вам придётся на него много ещё смотреть.

Структуру и так можно возвращать: http://c-faq.com/struct/passret.html

Надо вернуть результат из функции.

The This
Но встречается повсеместно :)

Ну иногда это предлагается как оптимизация ещё

Nastya-Medveda Автор вопроса
Danya🔥
Возвращать по значению

Ну там оптимизация, чтоб избежать копирования структуры. Я в-целом только за такое, но я бы хотела избежать неявных изменений данных.

The This
Но встречается повсеместно :)

В коде до 11го стандарта?)

Yalokin Kononov
ну не всегда

В приведенном примере функции можно.

Vlad Doc
В коде до 11го стандарта?)

RVO в 2003 вижаке работало

Nastya Medveda
Ну там оптимизация, чтоб избежать копирования стру...

Где оптимизация, у Прата? В С++, если возвращать по значению, тоже оптимизация. Без копий

Nastya Medveda
Ну там оптимизация, чтоб избежать копирования стру...

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

Константин
Не всегда

Рво гарантировано с 17-го стандарта. Что не всегда? Так можно много чего сказать

Константин
Для рво нрво есть условия

Естественно. И что? Смысл об этом говорить

Nastya Medveda
Ну там оптимизация, чтоб избежать копирования стру...

Чтобы избежать изменений надо передать как ссылки на константы либо как указатели на константы (лучше ссылки, конечно).

Liber Azerate
Естественно. И что? Смысл об этом говорить

Ну видимо смысл, что при невыполнении условий не работает рво

Константин
Ну видимо смысл, что при невыполнении условий не р...

Шок-контент. Толку от того, что ты здесь это сказал? Или, может, думаешь, что люди, которые говорят об RVO не знают этого?

Liber Azerate
Шок-контент. Толку от того, что ты здесь это сказа...

Зачем говорить что избегание копирования можно не делать благодаря рво, если понимаешь, что оно не всегда работает, такой посыл

d7d1cd
Чтобы избежать изменений надо передать как ссылки ...

Что то не пойму я о чем ты толкуешь. Вот есть кусок памяти (массив структур). Проходим по нему функцией и как-то меняем. Все, конец истории, никаких копирований, никаких возвратов.

Константин
Зачем говорить что избегание копирования можно не ...

Так сделай, чтобы работало. Просто возьми и соблюди условия. Вот от твоего комментария пользы нет никакого

d7d1cd
Настя хочет этого избежать

А зачем? Это же не. ФП с иммутабельными структурами.

Liber Azerate
Так сделай, чтобы работало. Просто возьми и соблюд...

https://habr.com/ru/company/yandex/blog/522900/ ну например тут советуют поступить ровно тем методом, что обычно является преждевременной оптимизацией, и да были замеры и тд и тп. и что-то как-то не до рво было и переписывание под рабочее рво

На самом деле, это нормально. Альтернатива ренджи, алгоритмы (из stl). Смысл происходящего - у тебя есть коллекция и ты как-то меняешь в ней данные. Это работает примерно как apply в пандах. Обычно такой работы с сырыми указателями стараются избегать в C++, но тут скорее наработка интуиций, которые помогут в будущем.

Nastya-Medveda Автор вопроса
Mikhail Kalugin
На самом деле, это нормально. Альтернатива ренджи,...

Спасибо. Я думаю что это Сишный подход в чистом (в плохом смысле это го слова) виде. В С++ я предполагаю что и структура и метод будут в одном классе и такой код писать не придется

Константин
https://habr.com/ru/company/yandex/blog/522900/ н...

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

Nastya Medveda
Спасибо. Я думаю что это Сишный подход в чистом (в...

Не стоит делать предположений относительно ООП в C++, оно необычное

Liber Azerate
Ну, я не говорю, что рво является серебряной пулей...

Так я тоже признаю, что сначала надо определить, что выхода нет, потом писать такие вещи

Nastya Medveda
В плохом смысле необычное?

Нет, в смысле C++ может в java-like ООП, но это неправильный подход для С++

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Гайс, вопрос для разносторонее развитых: читаю стрим с юарта, нада выделять с него фреймы с определенной структурой, если ли чо готовое, или долбаться с ринг буффером? нада у...
Vitaly
9
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
длина пакета фиксированная, или меняется?
Okhsunrog
7
Карта сайта