Рассмотрим следующее:
struct Point {double x; double y;};
double complexComputation(const& Point p1, const Point& p2)
{
// p1 and p2 used frequently in computations
}
Могут ли компиляторы оптимизировать передачу по ссылке в pass-by-copy для предотвращения частых разыменований? Другими словами, преобразуйте complexComputation
в это:
double complexComputation(const& Point p1, const Point& p2)
{
double x1 = p1.x; double x2 = p2.x;
double y1 = p1.y; double y2 = p2.y;
// x1, x2, y1, y2 stored in registers and used frequently in computations
}
Так как Point является POD, побочный эффект не может быть вызван копированием за вызывающим абонентом, верно?
Если это случай, то я всегда могу просто передавать объекты POD по ссылке const, независимо от того, насколько малы и не нужно беспокоиться о оптимальной проходящей семантике. Правильно?
EDIT: Меня интересует компилятор GCC, в частности. Я думаю, мне, возможно, придется написать некоторый тестовый код и посмотреть на ASM.