Есть ли, что-то не так с возвращением значения по умолчанию создало значения?

7 ответов

Нет это совершенно допустимо. Это также будет более эффективно, поскольку компилятор на самом деле может оптимизировать далеко временный файл.

16
ответ дан 6 December 2019 в 06:26
поделиться

Различие между примером Rob Walker называют Оптимизацией возвращаемого значения (RVO), если Вы хотите погуглить для него.

Кстати, если Вы хотите действовать, Ваш объект возвращается самым эффективным способом, создайте объект на "куче" (т.е. через новый) использование shared_ptr и возвратите shared_ptr вместо этого. Указатель получает возвращенные и подсчеты ссылок правильно.

2
ответ дан 6 December 2019 в 06:26
поделиться

Это допустимо, но производительность не может быть идеальной в зависимости от того, как это называют.

Например:

A a;
a = fn();

и

A a = fn();

не то же.

В первом случае конструктора по умолчанию называют, и затем оператор присваивания вызывается на, который требует, чтобы временная переменная была создана.

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

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

2
ответ дан 6 December 2019 в 06:26
поделиться

Возврат объектов от вызова функции является Шаблоном разработки "Фабрики" и используется экстенсивно.

Однако Вы захотите быть осторожными ли Вы эхо-сигналы или указатели на объекты. Бывшие из них представят Вас для копирования конструкторов / операторы присваивания, которые могут быть болью.

5
ответ дан 6 December 2019 в 06:26
поделиться

Это - совершенно разумный C++.

1
ответ дан 6 December 2019 в 06:26
поделиться

Это - совершенно легальный C++, и любой компилятор должен принять его. Что заставляет Вас думать, что это могло бы делать что-то не так?

1
ответ дан 6 December 2019 в 06:26
поделиться

Это - лучший способ сделать это, если Ваш класс довольно легок - я подразумеваю, что не очень дорого сделать копию из него.

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

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

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

1
ответ дан 6 December 2019 в 06:26
поделиться
Другие вопросы по тегам:

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