Ho una classe vettoriale (matematica) di base, che a mio parere beneficia dell'overloading dell'operatore di C ++. Le operazioni scalari vettoriali sono definite come funzioni auto modificanti nella classe stessa,
class Vec3i {
Vec3i& operator+=(int const n) {
for (int i = 0; i < 3; ++i) {
_data[i] += n;
}
}
std::array<int, 3> _data;
};
e come funzioni libere non modificabili. Per questi posso vedere due opzioni quando si tratta di passare nel vettore.
// By value, meaning an implicit copy.
Vec3i operator+(Vec3i lhs, int const rhs) {
return (lhs += rhs);
}
// By const reference, copying manually.
Vec3i operator+(Vec3i const& lhs, int const rhs) {
auto result = lhs;
return (result += rhs);
}
Ci sono buone ragioni per preferire una variante rispetto all'altra? Preferisco avere il parametro const (constando tutto ciò che non sarà mai modificato), ma la variante di valore è ben concisa. O dovrei semplicemente iniziare a leggere il valore-by come implicitamente const?