Я готовлюсь к пробному экзамену для проверки, и один вопрос на бумаге смущает меня.
Q.) Приложение должно передать структуру функции, которая изменит содержимое структуры так, чтобы при возврате из вызова функции вызывающая сторона могла использовать новые значения структуры. Вы бы передали структуру функции по значению, адресу или ссылке?
Четко укажите, почему вы выбрали тот или иной метод. Обоснуйте свой выбор, сравнив три метода.
Теперь мне трудно это понять, потому что я предполагаю, что лучшим ответом на вопрос всегда будет ссылка [Ref], поскольку он берет указатель ссылки на значение и редактирует его содержимое, а не просто получает копию. Это было бы иначе, если бы использовать программу на основе классов.
Единственный другой метод, который я бы понял, это иметь отдельное значение, получать и устанавливать значения, но это будет означать дополнительные строки кода, я немного не уверен в том, что это значит, может кто-нибудь помочь мне просветить? Я не знаю никаких других методов для достижения этой цели.
Это не «продвинутое программирование»; это абсолютные основы C ++.
То, будут ли параметры возврата по значению или «вне» (реализуемые с использованием ссылок или указателей) «наилучшими» для любого конкретного варианта использования, зависит от ряда факторов, стиля и мнения, являющихся лишь двумя из них.
// Return by value
// T a; a = foo(a);
T foo(const T& in) // or: T foo(T in)
{ // {
T out = in; //
out.x = y; // in.x = y;
return out; // return in;
} // }
// Out parameter (reference)
// T a; foo(a);
void bar(T& in)
{
in.x = y;
}
// Out parameter (pointer)
// T a; foo(&a);
void baz(T* in)
{
in->x = y;
}
Вопрос заключается в том, какие плюсы и минусы у этих трех подходов.
Других решений пока нет …