Быстрее вернуть значение или изменить параметр, переданный ссылка?

В программе, которую я пишу, я должен передавать большие структуры данных (изображения) между функциями. Мне нужно, чтобы мой код работал как можно быстрее в разных ОС (таким образом, я не могу профилировать все тестовые примеры). У меня часто есть код формы ...

void foo() {
  ImageType img = getCustomImage();
}

ImageType getCustomImage() {
  ImageType custom_img;
  //lots of code
  return custom_img;
}

AFAIK, строка ImageType img = getCustomImage (); приведет к вызову конструктора копирования для img с возвращаемым значением из custom_img в качестве параметра.Википедия говорит, что некоторые компиляторы даже проделают эту операцию снова для начальной временной переменной!

Мой вопрос: быстрее ли вообще обходить эти накладные расходы (конструкторы копирования для изображений дороги), используя передачу по ссылке, а не возвращаемое значение ...

void foo() {
  ImageType img;
  getCustomImage(img);
}

void getCustomImage(ImageType &img) {
  //code operating directly on img
}

Мне сказали, что если компилятор поддерживает оптимизация возвращаемого значения, то разницы быть не должно. Это правда? могу ли я (в пределах разумного) предположить это сейчас, и как мне структурировать свои программы, когда важна скорость

9
задан Arrakis 3 November 2011 в 15:37
поделиться