Pregunta

Mi pregunta está relacionada con Prasoon 's pregunta sobre los tipos no pOD y el valor de inicialización.

Me trató el siguiente código en línea como compiladores y teclado de Ideone pero los ejecutables dio error de ejecución en ambos sitios.

#include <iostream>
#include <cassert>

struct Struct {
    std::string String;
    int Int;
    bool k;
};

struct InStruct:Struct
{
   InStruct():Struct(){}
};

int main()
{
   InStruct i;
   assert ( i.Int == 0);
   std::cout << "Hello";
}

aquí
Teclado salida aquí

¿Eso quiere decir que ninguno de ellos apoyan C ++ función de inicialización 03 valor?

¿Fue útil?

Solución

  

¿Eso quiere decir que ninguno de ellos apoyan C ++ función de inicialización 03 valor?

Sí.

Antes de la versión 4.4, GCC no apoyó por completo valor de inicialización la cabecera compatibilidad Boost GCC explica este y tiene enlaces a los informes de defectos GCC pertinentes; véase la línea 77)

.

Si el código tiene que ser portátil, usted debe tener mucho cuidado depender de valor de inicialización; GCC no la apoyó plenamente hasta hace poco y Visual C ++ no es totalmente compatible con él, incluso en su última versión, Visual C ++ 2010.

Otros consejos

La declaración

InStruct i; 

no invocar valor de inicialización

  

$ 8.5.3 / 10 - "Un objeto cuya   inicializador es un conjunto vacío de   paréntesis, es decir, (), serán   valor inicializado ".

Si quieres valor de inicialización, que requeriría una expresión algo así como

assert(InStruct().Int == 0);

Trate que ahora! - Ideone soporta GCC-4.5.1

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top