¿Qué es mejor:¿Debo devolver bool o const bool?
bool MyClass::someQuery() const;
const bool MyClass::someQuery() const;
He estado usando 'bool const' ya que estoy seguro Recuerdo haber oído que es "lo que los enteros hacen" (por ejemplo, para los operadores de comparación), pero no puedo encontrar pruebas de eso en cualquier lugar, principalmente debido a que es difícil para Google e Intellisense no ayudar a ninguno;) ¿Alguien puede confirmar eso?
Para mí, devolver los valores de const (esto no se trata solo de bools) tiene más sentido; evitará que se modifiquen los temporales, lo que casi siempre será un error del programador. Solo quiero que algo respalde eso para poder exaltar el retorno de los valores de const a mis colegas :)
¿Cuál es el problema al permitir modificar los temporales? Puede ser una optimización importante (el compilador puede reutilizar su temporal en lugar de copiar en un nuevo no const). Es * no * "casi siempre un error del programador" – jalf
Creo que el ejemplo en C++ efectivo es bueno; "if ((a * b) = c)" probablemente sea un error y se detectará haciendo que el operador * devuelva un valor constante. Algo como "normalizar (crossProduct (a, b))" es otro, si normalize modifica su entrada en lugar de devolver una copia modificada, lo que hace que crossProduct devuelva un valor const que capte esto. –
@Ben: si normalize() modifica su entrada, entonces es una (T x) y por eso una variable local. En ese caso, es libre de modificarlo, pero nunca será "devuelto" (porque es local para normalizar). Si es un (T & x), entonces no puede llamarlo de esa manera porque no puede pasar valores r como referencias no const! Por lo tanto, debe declarar la normalización como T normalizar (T x) o T normalizar (const T & x) para llamarlo de la manera en que lo hizo. De lo contrario, el compilador se quejaría. – mmmmmmmm