2012-03-16 15 views
6

Al usar la clase de almacenamiento in en D, los datos son inmutables a su función. ¿Esto también pasa en los datos por referencia y no por valor? Me di cuenta de que in ref no es válido.Clase de almacenamiento "in" D

Si in no pasa los datos por referencia, ¿hay alguna forma de obtener los datos por referencia pero tiene la garantía de que los datos no se modificarán?

Respuesta

7

in Los parámetros son not passed by reference.

Por lo que puedo decir de the documentation, in es solo un atajo para const scope. No veo ninguna forma de emular los parámetros ref in, ya que ref scope es ilegal. Como dijo BCS, puede usar ref const si no le importa la clase de almacenamiento scope.

+0

Por cierto: ¿qué mejor es pasar el objeto de clase "enorme" a la función? en C++ se usan referencias de const, por lo tanto, 'ref const BaseClass obj' es completamente similar a' const BaseClass y obj' en C++? – Raxillan

+0

@Raxillan Sí, son equivalentes. También vale la pena señalar que 'ref' solo es necesario para estructuras grandes, ya que las clases siempre se pasan por referencia. – Maxpm

+1

¡Gracias! Sin embargo, es extraño para mí qué estructuras y clases son entidades diferentes en D - en C++ 'struct' es solo una clase con protección' pública 'predeterminada para todos sus miembros. Interesante. – Raxillan

2

No lo he comprobado pero creo que ref const debería funcionar.

+0

Eso compila, pero si 'in' no pasa por referencia (¿o sí?) Entonces ¿cuál es el punto de tener' in'? –

+0

@BobD, no estoy seguro de qué pasará con 'en', pero su inicio fue permitir que el compilador optimizara cómo se veía en forma. Esto significa que podría pasar por referencia si así lo desea. No creo que alguna vez lo haga y no sé los planes para eso. –

Cuestiones relacionadas