Функция, возвращающая значение против модифицирующего значения, переданного по ссылке

В каких ситуациях предпочтительнее вернуть объект, чем просто изменить объект, переданный этой функции по ссылке? Как я узнаю, какой из них выбрать?

На самом деле, вопрос заключается в том, есть ли вещи, которые я бы не смог сделать без возможности вернуть объект из функции, а вместо этого изменить только объекты, переданные по ссылке.

1

Решение

Основное прагматическое различие между

 TYPE function () ;

а также

 void function (TYPE &value) ;

является то, что первое может быть использовано в выражениях.

a = 10 * function () ;

if (function ())
{
}

Это главное соображение дизайна.

Помимо этого, я должен был бы получить мнение. Я собираюсь придерживаться объективной разницы.

4

Другие решения

Это очень просто …

Возврат по «значению»:
— если вы хотите копию объекта с текущим состоянием объекта;
— И инстант важен, если состояние исходного объекта изменится последним;

Вернуться по ссылке:
— если вы хотите иметь правильное состояние, когда объект обновляется другими;
— если вы хотите изменить состояние объекта, и другие должны быть в курсе этих изменений;

Это самые важные причины.

Но существует особый вариант использования, который вы должны знать:

По техническим причинам текущие языки обычно быстрее, когда вы возвращаетесь по ссылке.
Если скорость является требованием, вы также должны учитывать это ограничение, чтобы принять лучшее решение.

Но фундаментальное решение о том, как вы хотите иметь дело с состоянием объекта.

2

Возврат чего-либо является простым вариантом, но вы будете использовать ссылку, если что-то говорит против этого. Одна из причин заключается в том, что у вас есть что-то еще для возвращаемого значения, например, код успеха / неудачи. Другая причина в том, что в стеке он будет выглядеть большим, а вы — на крошечном компьютере. Тогда, конечно, вы можете захотеть изменить существующую переменную или структуру вместо создания новой. Я думаю это все.

Я не знаю ничего, что вы не можете сделать, передав ссылку или указатель для получения результата.

1
По вопросам рекламы [email protected]