es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Las variables estáticas de tipo de clase no utilizan inicialización por defecto?

C++ Primer, Lippman et. al. 5ª edición § 7.5.3 dice:

El constructor por defecto se utiliza automáticamente cuando un objeto se inicializa por defecto o por valor. La inicialización por defecto ocurre cuando definimos variables no estáticas (§ 2.2.1, p. 43) o arrays (§3.5.1, p. 114) en el ámbito de bloque sin inicializadores.

Probé un programa de prueba. Los objetos estáticos creados a partir de una clase definida por el usuario sí llaman a los constructores por defecto en mi programa de prueba.

Si la declaración destacada es cierta, entonces los objetos estáticos de tipo clase definida por el usuario no deberían llamar al constructor por defecto, ¿verdad? Sin embargo, eso ocurre en mi caso.

Entonces, ¿está equivocada mi interpretación de la declaración o hay algo más?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que tu interpretación de la afirmación es correcta. Según el texto citado de C++ Primer, el constructor por defecto solo debe ser utilizado automáticamente para la inicialización por defecto o de valor de variables no estáticas o matrices en el ámbito del bloque sin inicializadores. Los objetos estáticos no deben estar sujetos a inicialización por defecto y en cambio deben ser inicializados a cero o con valor.

    Sin embargo, si tu programa de prueba está mostrando que los objetos estáticos creados a partir de una clase definida por el usuario están llamando al constructor por defecto, podría ser debido a varias razones. Una posibilidad es que los objetos realmente se estén inicializando con un valor en lugar de iniciar en cero, en cuyo caso se llamaría al constructor por defecto. Otra posibilidad es que el constructor por defecto se esté llamando explícitamente en algún lugar de tu código.

    Sin ver tu programa de prueba, sería difícil determinar la razón exacta por la cual el constructor por defecto se está llamando para tus objetos estáticos. No obstante, según el texto citado, tu interpretación inicial de la afirmación parece ser correcta y el comportamiento que estás viendo en tu programa es inesperado.

Comments are closed.