Используя конструктора для возврата

Просто быстрый вопрос.

Я написал некоторый код, который возвращает пользовательский класс Команда, и код, который я написал, кажется, хорошо работает. Я задавался вопросом, существуют ли какие-либо причины, что я не должен делать его этот путь. Это - что-то вроде этого:

Command Behavior::getCommand ()
{
  char input = 'x';

  return Command (input, -1, -1);
}

Так или иначе я считал, что конструкторы не предназначены, чтобы иметь возвращаемое значение, но это работает в g ++.

Спасибо за любой совет,

Rhys

9
задан Rhys van der Waerden 15 April 2010 в 03:22
поделиться

4 ответа

Сам конструктор не имеет возвращаемого значения. Это создает временный объект Command и возвращает созданный объект вызывающей стороне. Фактически это то же самое, как если бы вы сказали:

Command temp(input, -1, -1);
return temp;

Он будет работать с любым компилятором C ++.

7
ответ дан 4 December 2019 в 21:09
поделиться

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

2
ответ дан 4 December 2019 в 21:09
поделиться

У вас нет конструктора с возвращаемым значением. Command :: Command (char, int, int) - ваш конструктор.

У вас есть метод, который возвращает объект, что совершенно нормально.

0
ответ дан 4 December 2019 в 21:09
поделиться

Конструктор не имеет возвращаемого значения; вы явно создаете временный экземпляр класса и возвращаете его. В этом нет ничего плохого, кроме как сделать копию.

Если вы хотите избежать копирования, у вас есть несколько вариантов, одна из которых состоит в том, чтобы иметь параметр out, который представляет собой Command * , и использовать команды new и delete.

1
ответ дан 4 December 2019 в 21:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: