2010-12-07 9 views

Respuesta

10

es garantizado?

Sí, está garantizado. Los valores de S().i y S().j serían 0. () implica value initialization. (que significa ij y sería inicializada a cero porque S es una clase sin un constructor por defecto de usuario definido)

+0

Wow !!!! Muchas gracias. – Bollinger

+0

En particular, agregar 'S() {}' (un ctor definido por el usuario sin nada) a 'struct S' hará que' i' y 'j' queden sin inicializar, lo que significa que' assert() 'es probable para disparar –

+0

Sí, derecha [.....] –

0

De C++ estándar ISO/IEC 14882: 2003 (E) punto 3.6.2

Los objetos con una duración de almacenamiento estático (3.7.1) se inicializarán en cero (8.5) antes de que se lleve a cabo cualquier otra inicialización .

Esto es válido ya que ambas variables tienen cero inicialización.

+3

No veo ningún objeto con la asignación de almacenamiento estático aquí. La expresión 'S()' crea un ** objeto temporal ** local al alcance de 'assert()'. –

+0

Desea la sección 8.5, que trata sobre el caso general de la inicialización. – birryree

+0

lo siento ... de alguna manera pensé que él está usando la variable global –

-1

Técnicamente, sí. Se inicializarán en 0 (al menos en una versión sin depuración para la mayoría de los compiladores. El compilador de Visual Studio generalmente inicializará las variables sin inicializar a un patrón específico en compilaciones de depuración) .

Sin embargo, si estaba sentado en una revisión de código, no se sorprenda si le gritan por no inicializar explícitamente sus variables.

+0

Garantizado para ser cero. Debido a los() refuerzos. –