Просто быстрый вопрос.
Я написал некоторый код, который возвращает пользовательский класс Команда, и код, который я написал, кажется, хорошо работает. Я задавался вопросом, существуют ли какие-либо причины, что я не должен делать его этот путь. Это - что-то вроде этого:
Command Behavior::getCommand ()
{
char input = 'x';
return Command (input, -1, -1);
}
Так или иначе я считал, что конструкторы не предназначены, чтобы иметь возвращаемое значение, но это работает в g ++.
Спасибо за любой совет,
Rhys
Сам конструктор не имеет возвращаемого значения. Это создает временный объект Command
и возвращает созданный объект вызывающей стороне. Фактически это то же самое, как если бы вы сказали:
Command temp(input, -1, -1);
return temp;
Он будет работать с любым компилятором C ++.
getCommand
не является конструктором. Вышеупомянутое совершенно верно, а также в целом эффективно из-за оптимизации возвращаемого значения (RVO), которая (я думаю) не применима, если вы создали экземпляр локальной переменной и вернули ее.
У вас нет конструктора с возвращаемым значением.
Command :: Command (char, int, int)
- ваш конструктор.
У вас есть метод, который возвращает объект, что совершенно нормально.
Конструктор не имеет возвращаемого значения; вы явно создаете временный экземпляр класса и возвращаете его. В этом нет ничего плохого, кроме как сделать копию.
Если вы хотите избежать копирования, у вас есть несколько вариантов, одна из которых состоит в том, чтобы иметь параметр out, который представляет собой Command *
, и использовать команды new и delete.