Do Ideone y teclado de la realidad no apoyar C ++ 03?
-
29-09-2019 - |
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";
}
¿Eso quiere decir que ninguno de ellos apoyan C ++ función de inicialización 03 valor?
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