![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Poison80 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 14.9.2005 Репутация: нет Всего: нет |
День добрый! У меня возник такой вопрос, тип функции может быть структура
например
всем зарание спасибо |
|||
|
||||
| srd |
|
|||
![]() Нереварин ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 951 Регистрация: 30.8.2003 Где: Владивосток Репутация: 27 Всего: 49 |
P.S. Делать структуры возвращаемым значением функции - это не очень хорошая практика. -------------------- Не смей читать мою подпись!!! |
|||
|
||||
| Poison80 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 14.9.2005 Репутация: нет Всего: нет |
Спасибо!
|
|||
|
||||
| Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 10 Всего: 93 |
Ну... А как же тогда? Нет, я конечно понимаю, что можно передать указатель, и заполнить его, как на каждом шагу делается в WinAPI. Но если у нас С++, то возвращать объекты -- самое правильное поведение. Это сообщение отредактировал(а) Дрон - 14.9.2005, 15:12 -------------------- Да. Именно так. |
|||
|
||||
| Poison80 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 25 Регистрация: 14.9.2005 Репутация: нет Всего: нет |
А каким способом посоветуете способом вернуть из вунцкии нескоклько переменных?!
(желательно с примером) спасибо! |
|||
|
||||
| Дрон |
|
||||||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 10 Всего: 93 |
Вот так обычно делается:
А вызывать так:
-------------------- Да. Именно так. |
||||||
|
|||||||
| srd |
|
|||
![]() Нереварин ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 951 Регистрация: 30.8.2003 Где: Владивосток Репутация: 27 Всего: 49 |
Не вижу причины тратиться на копирование объекта, если можно обойтись без него. А это и происходит в том случае, если функция возвращает объект структуры/класса. Уж лучше передавать функции ссылку (что хорошо) или указатель (что менее хорошо). А возвращать объекты лучше или тривиальных типов, или для которых реализован подсчёт ссылок. Это сообщение отредактировал(а) srd - 14.9.2005, 15:18 -------------------- Не смей читать мою подпись!!! |
|||
|
||||
| Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 10 Всего: 93 |
Ну да, я и сам понимаю. Просто в большинстве случаев эти траты незначительны, по сравнению с остальными операциями.
Хотя ведь именно из-за этих трат при передаче объекта by value я предпочитаю не пользоваться структурами в C# ЗЫ: Как-то я невовремя своё сообщение отредактировал. Сорри. -------------------- Да. Именно так. |
|||
|
||||
| Artemon |
|
|||
|
а ты мне нравишься ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1771 Регистрация: 24.2.2004 Где: Челябинск Репутация: 1 Всего: 20 |
SRD, Чем это вам указатель не угодил? -------------------- Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru |
|||
|
||||
| Гость_AISIN |
|
|||
|
Unregistered |
Artemon Я обычно пользуюсь указателем. Указатель - это круто, но ссылка немного проще для понимания, зато ссылка должна обязательно ссылаться на какой нибудь тип переменной.
|
|||
|
||||
| En_t_end |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2074 Регистрация: 4.12.2004 Репутация: 1 Всего: 20 |
Указатель это круто, но вот если допусим передается указатель на переменную типа структуры либо обьект какого-то класса, то здесь безусловано удобнее пользоваться ссылкой. допустим BOOL somefunc(SomeClass &obj); А вот в таком случае указатель - это ваапще незаменимый друг: BOOL somefunc(void *some_mem_memb); Добавлено @ 07:25 Хотя мне кажется гораздо нагляднее делать так : void somefunc(SomeClass *obj); Ибо потом в коде будет наглядно показанно, что в функцию передается адресс somefunc(&someobj); А с somefunc(someobj); - в случае с параметром ссылкой некоторые ненатасканные личности могут подумать, что обьект someobj не может быть изменен, в таких случаях конечно надо всегда анализировать семантику функции перед её использованием. |
|||
|
||||
| srd |
|
||||
![]() Нереварин ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 951 Регистрация: 30.8.2003 Где: Владивосток Репутация: 27 Всего: 49 |
Просто предосторожность. Если объект отдаёт наружу указатель, то возникает соблазн применить к этому указателю delete
Распространённый аргумент. ИМХО чепуха. Потому что somefunc(&someobj) тоже совершенно ни о чём не говорит, т.к. функция может быть как somefunc( SomeClass* ), так и somefunc( const SomeClass*). Давай внятные имена функциям и парметрам, тогда не будут возникать вопросы, кто чего зачем изменяет, не зависимо от того, является ли аргумент ссылкой или указателем. -------------------- Не смей читать мою подпись!!! |
||||
|
|||||
| En_t_end |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2074 Регистрация: 4.12.2004 Репутация: 1 Всего: 20 |
srd
Я имел ввиду простака, ибо конечно там может быть не просто SomeClass *someobj, но и const SomeClass *someobj и даже const *SomeClass someobj - всегда надо смотреть на семантику(!!!), что я и делаю. |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |