Supongamos que tengo una clase de esa manera:Diferencia entre `T &` y `const T &` para todos const clase
class Foo : boost::noncopyable
{
public:
Foo(int a, int b);
const int something;
const int something_else;
const std::string another_field;
// and that's that, no more methods nor fields
};
Ahora, ¿hay alguna diferencia práctica entre el acceso a los objetos de esta clase a través de una Foo&
, a diferencia de const Foo&
, aparte de que estos dos son dos tipos distintos?
No debería haber ninguna diferencia para acceder a sus campos , ya que son const
, por lo que se tendrá acceso a través de un const T&
de todos modos.
¿Pero hay alguna diferencia de cuando se trata de la clase en general? Algo que ver con las plantillas, tal vez? ¿Cualquier cosa?
Ahora que templatetypedef has written a nice answer, que por desgracia no es útil en este caso, creo que sería bueno para subrayar que es muy mucho de qué se puede hacer cuando ya tiene una referencia (tenga en cuenta todos estos "accediendo"), no sobre lo que puede vincular a la referencia.
Por lo tanto, puede suponer que la referencia ya está allí, vinculada a algún objeto. Ahora todo se trata de lo que se puede hacer con eso.
En una nota lateral, si tiene dos 'Foo's llamados' a' y 'b', la asignación' a = b' es ilegal. ¿Es eso lo que quieres? – fredoverflow
@FredOverflow: Sí, incluso se hace explícito: 'clase Foo: boost :: noncopyable'. – Fanael