@Anvario0

Что возвращает return в С++?

Хотел бы узнать, что возвращает return в C++: копию объекта или сам объект?
Напрмер:
coffeeMachine operator +(const coffeeMachine& other)
	{
		coffeeMachine temp;
		temp.x = this->x + other.x;
		temp.y = this->y + other.y;
		temp.size = this->size + other.size;

		return temp;
	}

Тут return вернёт копию объекта temp или сам объект temp?
  • Вопрос задан
  • 332 просмотра
Пригласить эксперта
Ответы на вопрос 3
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Зависит от кода функции и опций компилятора.

Советую всем программистам на C++ хотябы почитать про ассемблер.
Стек, регистры, вот это вот все. Тогда станет понятно, как работает процессор.

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

Но есть такая оптимизация, как RVO. В стандарте даже прописано, когда конкретно она гарантирована. Тогда копии не происходит. При этом компилятор вообще не создает локальной переменной. А вместо этого сразу же работает с тем местом, куда надо будет возвращать значение.

Если код и включенные оптимизации позволяют это сделать - то копии не будет. Но в общем случае - будет копия.
Ответ написан
Комментировать
gbg
@gbg Куратор тега C++
Любые ответы на любые вопросы
В данном конкретном случае, сработает оптимизация RVO - лишних копирований не произойдет.
Ответ написан
Комментировать
Если правильно помню плюсы - то вернет копию.
Сам объект создан на стеке и живет только во время выполнения функции.

P.S. это будет поверхностная копия или глубокая - зависит от наличия и реализации в coffeeMachine конструктора копирования
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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