En primer lugar, ¿por qué volver const? decir que tengo¿Por qué alguna vez una función devuelve un const, o const referencia
friend const MyVec operator-(const MyVec& left, const MyVec& right)
por lo regresa const me hace no puedo hacer:
mva - mvb = mvc;
En segundo lugar, ¿por qué volver referencia constante? si hay:
friend const MyVec& operator++(MyVec& v)
con const no puedo: (++mva) = mvc
si es
MyVec& operator++(MyVec& v)
puedo: // ++(++mva)
con incremento de dos veces.
estoy Entendiendo ¿verdad?
"a veces el operador ++ usado en un iterador debe devolver una referencia constante" No. No debería. Porque todos esperan que la expresión '++ (++ obj)' sea válida. La forma más útil de definir el operador de prefijo ++ es 'T & T :: operator ++() {...}' y no hay una buena razón para definirlo de otra manera. ¿Puede ser que hayas escrito mal algo? ¿Tal vez quieres decir 'operador []' como en tu ejemplo? –
"No hay una buena razón para devolver un objeto const" Sí, ver el artículo 21 efectivo de C++.Para evitar construcciones como (a * b) = c – rve
"Las funciones del operador aritmético no deben devolver objetos const": Suponiendo que se refiere a - y + etc. Sí deberían: ver Effective C++ y http://www.cs.caltech.edu /courses/cs11/material/cpp/donnie/cpp-ops.html – rve