Question

Ma question est liée à Prasoon 's question sur les types non pOD et l'initialisation de la valeur.

J'ai essayé le code suivant sur compilateurs en ligne comme Ideone et CodePad mais les executables a donné erreur d'exécution sur les deux sites.

#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";
}


CodePad sortie

Est-ce que cela veut dire qu'aucun d'eux ne prennent en charge C ++ 03 Valeur fonction d'initialisation?

Était-ce utile?

La solution

  

Est-ce que cela veut dire qu'aucun d'eux ne prennent en charge C ++ 03 Valeur fonction d'initialisation?

Oui.

Avant la version 4.4, GCC ne supporte pas complètement l'initialisation de la valeur ( l'en-tête de compatibilité GCC Boost explique cela et a des liens vers les rapports de défauts GCC pertinents, voir la ligne 77)

.

Si votre code doit être portable, vous devriez être très prudent compter sur l'initialisation de la valeur; GCC n'a pas soutenu pleinement jusqu'à récemment et Visual C ++ ne supporte pas complètement même dans sa dernière version, Visual C ++ 2010.

Autres conseils

La déclaration

InStruct i; 

ne invoque l'initialisation valeur

  

8.5.3 $ / 10 - « Un objet dont   initialiseur est un ensemble vide de   entre parenthèses, à savoir, (), sont   valeur initialisé. "

Si vous voulez la valeur initialize, vous auriez besoin d'une expression quelque chose comme

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

Essayez il maintenant! - prend en charge Ideone GCC-4.5.1

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top