В программе, которую я пишу, я должен передавать большие структуры данных (изображения) между функциями. Мне нужно, чтобы мой код работал как можно быстрее в разных ОС (таким образом, я не могу профилировать все тестовые примеры). У меня часто есть код формы ...
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
}
Мне сказали, что если компилятор поддерживает оптимизация возвращаемого значения, то разницы быть не должно. Это правда? могу ли я (в пределах разумного) предположить это сейчас, и как мне структурировать свои программы, когда важна скорость