2011-12-30 10 views
7

Im tratando de hacer algo como esto (que duerma compilar):¿Cómo inicializar los elementos de la matriz usando la lista de inicializadores?

struct mystruct { 
    somestruct arr[4]; 
    mystruct(somestruct val) : arr[0](val), arr[1](val), arr[2](val), arr[3](val) {} 
}; 

¿Cómo es este el mejor hecho en C++?

Nota: es posible que desee establecer solo algunos de los elementos de la matriz con este método.

+1

posible duplicado de [¿Cómo puedo usar la lista de inicialización de miembros para inicializarlo?] (Http://stackoverflow.com/questions/5602030/how-can-i-use-member-inicialization-list-to-initialize-it) – ildjarn

+0

+1 para tratar de usar la lista de inicializadores en lugar de asignar los valores dentro del cuerpo del constructor. – Andre

+0

@Andre, ¿hay alguna diferencia de rendimiento con "asignar los valores dentro del cuerpo del constructor"? (No puedo probar ya que no tengo el compilador que usa el ejemplo de Mike) – Rookie

Respuesta

6

En C++ 11, si desea establecer todos los elementos:

mystruct(somestruct val) : arr{val,val,val,val} {} 

En C++ 03, 11 o C++ si sólo desea configurar algunos elementos:

mystruct(somestruct val) { 
    arr[0] = val; 
    arr[1] = val; 
    arr[2] = val; 
    arr[3] = val; 
} 
+1

Lástima que no funciona en el compilador visual-C++, estoy usando el último en este momento, pensé que había una mejor manera. Por cierto, ¿el compilador optimiza este último tan rápido como el anterior? – Rookie

+0

Para compilar, es posible que necesite usar el indicador -std = C++ 11. Deberías tener algún tipo de panel de preferencias donde puedes configurarlo. –

+0

Con la opción del compilador '-std = C++ 0x' todo lo que hice fue' classname :: clasname(): array {num1, num2, num3, num4} {/ * todas las funciones o métodos de constructor o asignaciones de variables van aquí */} ' Inicialmente me confundí con '{}' al final en tu solución, pero luego me di cuenta de que era el cuerpo del constructor :-) – enthusiasticgeek

Cuestiones relacionadas