Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Передача структуры в функцию / 17 сообщений из 17, страница 1 из 1
19.08.2014, 04:09
    #38723040
SashaMercury
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача структуры в функцию
Здравствуйте.
Собственно проблем никаких нет, я могу передать через указатель, а могу передать по значению.
Писал сегодня функцию, она принимает две точки

Код: plaintext
1.
2.
3.
4.
5.
struct Point
{
	double x;
	double y;
};



и возвращает значение сжимающего коффициента (вторая точка получена после воздействия сжимающего оператора на первую точку)

Код: plaintext
1.
double get_coef(struct Point a, struct Point b)



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

1. Как вы передаёте структуры ?
2. Правильно ли я рассуждаю ?
...
Рейтинг: 0 / 0
19.08.2014, 04:35
    #38723043
SashaMercury
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача структуры в функцию
Хотя в таком случае мне нужно указывать квалификатор const для того чтобы показать что параметры меняться не будут. Но это единственное преимущество. И то, не уверен что это преимущество.

В общем всё равно не нравится. Перепишу через указатели
...
Рейтинг: 0 / 0
19.08.2014, 11:57
    #38723284
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача структуры в функцию
SashaMercuryПерепишу через указатели
Не надо через указатели. Передавай по константной ссылке. Технически - то же самое, но
синтаксис проще.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
19.08.2014, 13:12
    #38723417
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача структуры в функцию
SashaMercuryМне не требуется передача по указателю, можно передать по значению.
Но я написал код, и сразу испытал жуткий дискомфорт. Не могу дальше писать программу, хочу переписать через указатели, и даже почему-то уверен что это правильно. Вообще, мне кажется ,что все структуры должны передаваться через указатель. (Вероятно из-за экономии памяти, хотя может быть не это основная причина)

1. Как вы передаёте структуры ?
2. Правильно ли я рассуждаю ?
Передача объектов по значению имеет смысл в рекурсиях и (возможно) в safe-threaded функциях.

В остальных случаях в С++ имеет смысл передавать ссылку или указатель.

Существуют ЯП и парадигмы где как раз передача по значению превалирует.
...
Рейтинг: 0 / 0
19.08.2014, 13:51
    #38723458
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача структуры в функцию
Dimitry SibiryakovПередавай по константной ссылке.
Он еще до С++ не добрался :)
...
Рейтинг: 0 / 0
19.08.2014, 14:11
    #38723483
BagaBaga
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача структуры в функцию
Anatoly MoskovskyDimitry SibiryakovПередавай по константной ссылке.
Он еще до С++ не добрался :)
А там его поджидает movable семантика :)
...
Рейтинг: 0 / 0
19.08.2014, 14:15
    #38723486
BagaBaga
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача структуры в функцию
Dimitry SibiryakovSashaMercuryПерепишу через указатели
Не надо через указатели. Передавай по константной ссылке. Технически - то же самое, но
синтаксис проще.

Не сильно- то и проще. На один символ :)
st.f при ссылке vs st->f при указателе...
...
Рейтинг: 0 / 0
19.08.2014, 14:18
    #38723491
SashaMercury
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача структуры в функцию
А что там с синтаксисом то проще ? Указатели мне понятны, и проблем с ними я не испытываю. Они мне очень даже нравятся. Я даже не могу представить как они могут кому-то не нравится.
...
Рейтинг: 0 / 0
19.08.2014, 14:40
    #38723518
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача структуры в функцию
SashaMercuryА что там с синтаксисом то проще ?
Копипастить проще куски кода. Например решил ты вынести кусок кода работы со структурой в отдельную функцию: в параметрах как ссылку указал и скопировал код, а с указателем надо еще точки на -> править. Да и путаницы меньше со ссылками - везде ставь точку. Правда есть другой подвох - забудешь & в параметрах указать, ошибки при компиляции не будет, пойдет передача по значению. В общем минусы есть там и там. Лично мне ссылки удобнее.

PS Я уже это писал тебе как-то, в ответ получил от местных гуру что ссылки это уже С++.
...
Рейтинг: 0 / 0
19.08.2014, 14:41
    #38723520
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача структуры в функцию
BagaBagaНе сильно- то и проще. На один символ :)
st.f при ссылке vs st->f при указателе...
И на передающей стороне:
1) Явное взятие адреса
2) Возможность передать инвалидный указатель, включая NULL.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
19.08.2014, 14:56
    #38723537
SashaMercury
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача структуры в функцию
Dima TSashaMercuryА что там с синтаксисом то проще ?
Копипастить проще куски кода. Например решил ты вынести кусок кода работы со структурой в отдельную функцию: в параметрах как ссылку указал и скопировал код, а с указателем надо еще точки на -> править. Да и путаницы меньше со ссылками - везде ставь точку. Правда есть другой подвох - забудешь & в параметрах указать, ошибки при компиляции не будет, пойдет передача по значению. В общем минусы есть там и там. Лично мне ссылки удобнее.

PS Я уже это писал тебе как-то, в ответ получил от местных гуру что ссылки это уже С++.

Да, помню, были жаркие споры, вроде-бы :D
...
Рейтинг: 0 / 0
19.08.2014, 15:01
    #38723547
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача структуры в функцию
Сахарок это.
...
Рейтинг: 0 / 0
19.08.2014, 15:05
    #38723551
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача структуры в функцию
Dima Tссылки это уже С++.
Передача структуры по значению это тоже "уже С++".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
19.08.2014, 15:21
    #38723569
SashaMercury
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача структуры в функцию
Dimitry SibiryakovDima Tссылки это уже С++.
Передача структуры по значению это тоже "уже С++".


Си такого не предполагает разве ??
...
Рейтинг: 0 / 0
19.08.2014, 15:28
    #38723576
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача структуры в функцию
Dimitry SibiryakovПередача структуры по значению это тоже "уже С++".
Нет. Пока еще С :)
...
Рейтинг: 0 / 0
21.08.2014, 10:09
    #38725245
SashaMercury
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача структуры в функцию
Вот что я сегодня встретил у Диомидиса Спинеллиса в Анализе программного кода (хотя про экономию памяти и быстродействие догадывался, и писал выше):



Анализ программного кода. Диомидис Спинеллис. 3.1.7 Указатели как псевдонимыПрисваивание указателя выполняется быстрее и экономнее, чем присваивание большого объекта. В следующем примере переменная curt могла бы быть структурным объектом, а не указателем на такой объект. Но соотвествующее присваивание выполнялось бы неэкономно, поскольку пришлось бы копировать содержимое целой структуры:

Код: plaintext
1.
2.
3.
static struct termios cbreakt, rawt, *curt;
[...]
curt=userw?&rawt:&cbreakt;
...
Рейтинг: 0 / 0
21.08.2014, 12:12
    #38725404
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Передача структуры в функцию
SashaMercuryПрисваивание указателя выполняется быстрее и экономнее, чем
присваивание большого объекта
Это зависит от величины данного объекта и генерируемого кода. В общем случае разницу между
MOV и MOVSW без микроскопа не разглядишь.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Передача структуры в функцию / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]