Передача структуры в функцию

SashaMercury
Дата: 19.08.2014 04:09:31
Здравствуйте.
Собственно проблем никаких нет, я могу передать через указатель, а могу передать по значению.
Писал сегодня функцию, она принимает две точки

struct Point
{
	double x;
	double y;
};


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

double get_coef(struct Point a, struct Point b)


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

1. Как вы передаёте структуры ?
2. Правильно ли я рассуждаю ?
SashaMercury
Дата: 19.08.2014 04:35:41
Хотя в таком случае мне нужно указывать квалификатор const для того чтобы показать что параметры меняться не будут. Но это единственное преимущество. И то, не уверен что это преимущество.

В общем всё равно не нравится. Перепишу через указатели
Dimitry Sibiryakov
Дата: 19.08.2014 11:57:40

SashaMercury
Перепишу через указатели

Не надо через указатели. Передавай по константной ссылке. Технически - то же самое, но
синтаксис проще.

Posted via ActualForum NNTP Server 1.5

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

1. Как вы передаёте структуры ?
2. Правильно ли я рассуждаю ?

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

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

Существуют ЯП и парадигмы где как раз передача по значению превалирует.
Anatoly Moskovsky
Дата: 19.08.2014 13:51:20
Dimitry Sibiryakov
Передавай по константной ссылке.

Он еще до С++ не добрался :)
BagaBaga
Дата: 19.08.2014 14:11:56
Anatoly Moskovsky
Dimitry Sibiryakov
Передавай по константной ссылке.

Он еще до С++ не добрался :)

А там его поджидает movable семантика :)
BagaBaga
Дата: 19.08.2014 14:15:52
Dimitry Sibiryakov
SashaMercury
Перепишу через указатели

Не надо через указатели. Передавай по константной ссылке. Технически - то же самое, но
синтаксис проще.

Не сильно- то и проще. На один символ :)
st.f при ссылке vs st->f при указателе...
SashaMercury
Дата: 19.08.2014 14:18:58
А что там с синтаксисом то проще ? Указатели мне понятны, и проблем с ними я не испытываю. Они мне очень даже нравятся. Я даже не могу представить как они могут кому-то не нравится.
Dima T
Дата: 19.08.2014 14:40:36
SashaMercury
А что там с синтаксисом то проще ?

Копипастить проще куски кода. Например решил ты вынести кусок кода работы со структурой в отдельную функцию: в параметрах как ссылку указал и скопировал код, а с указателем надо еще точки на -> править. Да и путаницы меньше со ссылками - везде ставь точку. Правда есть другой подвох - забудешь & в параметрах указать, ошибки при компиляции не будет, пойдет передача по значению. В общем минусы есть там и там. Лично мне ссылки удобнее.

PS Я уже это писал тебе как-то, в ответ получил от местных гуру что ссылки это уже С++.
Dimitry Sibiryakov
Дата: 19.08.2014 14:41:02

BagaBaga
Не сильно- то и проще. На один символ :)
st.f при ссылке vs st->f при указателе...

И на передающей стороне:
1) Явное взятие адреса
2) Возможность передать инвалидный указатель, включая NULL.

Posted via ActualForum NNTP Server 1.5