2010-04-20 19 views
5

Esta pregunta se relaciona con la publicación here. ¿Es posible inicializar una matriz en una llamada de función o llamada de constructor? Por ejemplo, el constructor de class foo quiere una matriz de tamaño 3, por lo que quiero llamar a foo ({0, 0, 0}). Lo intenté y no funcionó. Me gustaría poder inicializar objetos de tipo foo en listas de inicialización de constructores de otros objetos, o inicializar foo sin crear primero una matriz separada. es posible?Inicialización de la matriz de C++ en llamada de función o llamada de constructor

+0

Primero habla de la inicialización de la matriz, y luego necesita inicializar un objeto de la clase. Entonces, ¿qué es lo que necesita inicializar: un objeto de matriz o un objeto de clase? – AnT

+0

La inicialización de una clase es un caso específico que utilicé como ejemplo, y es la razón por la que hice la pregunta. Sin embargo, también podría tener una función foo que tome una matriz de tamaño 3 y desee llamarla como: foo ({0, 0, 0}). Cambié el OP para hacerlo más obvio. – david

+0

Sí, pero aún se pregunta "¿Es posible inicializar una matriz sin asignarla?". Bueno, sí, es posible. Por ejemplo, 'int a [10] = {5}' inicializa una matriz sin asignarla, tal como lo pidió. Sin embargo, eso no se parece a lo que realmente parece interesarle. – AnT

Respuesta

5

No en el estándar actual. Será posible en C++ 11

En gcc puede utilizar un molde para forzar la creación de un temporal, pero no es C++ estándar (C99):

typedef int array[2]; 
void foo(array) {} // Note: the actual signature is: void foo(int *) 
int main() { 
    foo((array){ 1, 2 } ); 
} 
+0

Esto funciona en C99, pero no en C++ 03 (ni en C++ 0x - este es un literal compuesto). –

+0

El código está bien con (macports) gcc hasta 4.6; gcc 4.7 informa 'error: toma la dirección de la matriz temporal'. –

+0

C++ 11 es el estándar actual, por lo que esta respuesta debe actualizarse. –

0

Si permitido por su diseño , puede considerar envolver los datos dentro de una clase y en el constructor predeterminado inicializar con 0 (o cualquier valor de su elección)

Cuestiones relacionadas