-
- Чтобы вернуть указатель на что-то, это что-то нужно сначала
определить. А когда возвращаешь структуру, всё делается
автоматически. Вопрос не эффективности кода, а эффективности
программирования. - Nikolay_Po(19.11.2020 22:15)
- Я чего-то явно не понимаю. Мы же структуру возвращаем куда-то, т.е.
в переменную имеющую такой же тип. Она уже определена и занимает
память. Мы не можем обращаться к полям структуры через x = my_func(..).field_1; - teap0t(19.11.2020 22:23)
- Мы структуру возвращаем во временный объект. Но опять же следует разделить, то что как бы понарошку, и что получается на самом деле. Этот временный объект -- он существует только в голове у тебя, компилятор там как-то аллоцирует регистры и куда-то положит лучше тебя, не твоя забота. И этот временный объект живёт до точки с запятой (';'), потом уничтожается. fk0(1233 знак., 20.11.2020 00:00, ссылка)
- Верно, всё равно переменная будет. Получается, возврат структуры
немного нагляднее. Там даже слово return используется. А если из
возвращаемой структуры используется только одно поле, то
func().field можно и нужно использовать. - SciFi(19.11.2020 22:30)
- Опа! Учту. - teap0t(19.11.2020 23:18)
- Я чего-то явно не понимаю. Мы же структуру возвращаем куда-то, т.е.
в переменную имеющую такой же тип. Она уже определена и занимает
память. Мы не можем обращаться к полям структуры через x = my_func(..).field_1; - teap0t(19.11.2020 22:23)
- В читаемости, ИМХО. Компилер-то скорее всего, передаёт имана
указатель на структуру в куче. - mse homjak(19.11.2020 22:14)
- Когда я заглядывал, там через стек было. - SciFi(19.11.2020 22:28)
- Т.е. вариант teap0t(229 знак., 19.11.2020 22:20)
- НЕТ. Первый вариант лучше, но не потому что эффетивней. Он лишь не хуже в простых случаях. Он лучше по другим причинам, может быть значимым для языка C, но значимым для C++ (требуется конструктор по-умолчанию, нужен placement new...), и это не про эффективность ассемблера вообще. Кроме того он наглядней и менее подвержен ошибкам. Для вариантов с большими структурами, с циклами, с объявлением struct_A не здесь и сейчас, а где-то в другом месте, и вообще не в стеке -- второй fk0(89 знак., 20.11.2020 00:06)
- Ну, ИМХО, тут дело не в объявлении, а в последующем использовании.
Например, в одном режиме вам нужно получить от функцыи комплект
настроек и сразу упихать его в порты. А в другом режиме нужно
набить массив из этих структур, чтобы, например, потом, по таймеру,
метать их в топку. Работать со структурой будет удобнее и
нагляднее, чем с указателями. - mse homjak(19.11.2020 22:33)
- Ок. - teap0t(19.11.2020 23:19)
- Чтобы вернуть указатель на что-то, это что-то нужно сначала
определить. А когда возвращаешь структуру, всё делается
автоматически. Вопрос не эффективности кода, а эффективности
программирования. - Nikolay_Po(19.11.2020 22:15)