Допустим, у меня есть следующее:
struct point
{
double x;
double y;
double z;
};
Я могу написать следующее:
void point_mult(point& p, double c) { p.x *= c; p.y *= c; p.z *= c; }
void point_add(point& p, const point& p2) { p.x += p2.x; p.y += p2.y; p.z += p2.z; }
Поэтому я могу сделать следующее:
point p{1,2,3};
point_mult(p, 2);
point_add(p, point{4,5,6});
Для этого не требуется копий point
, а только две конструкции, а именно конструкция point{1,2,3}
и конструкция point{4,5,6}
.Я считаю, что это применимо, даже если point_add
, point_mult
и point{...}
находятся в отдельных единицах компиляции (т.е. не могут быть встроены).
Однако я хотел бы написать код в более функциональном стиле, подобном следующему:
point p = point_add(point_mult(point{1,2,3}, 2), point{4,5,6});
Как можно написать point_mult
и point_add
так, чтобы копии не требовались (даже если point_mult
и point_add
находятся в отдельных блоках компиляции), или функциональный стиль вынужден быть не таким эффективным в C ++?