Domanda

La mia domanda è legata alla Prasoon 's domanda sui tipi non pOD e l'inizializzazione del valore.

Ho provato il seguente codice su compilatori online come Ideone e tastiera codici, ma gli eseguibili ha dato errore di runtime su entrambi i siti.

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

qui
CodePad uscita qui

Questo significa che nessuno di loro sostengono funzione di inizializzazione 03 valore C ++?

È stato utile?

Soluzione

  

Questo significa che nessuno di loro sostengono funzione di inizializzazione 03 valore C ++?

Sì.

Prima della versione 4.4, GCC ha non supporta completamente l'inizializzazione valore l'intestazione compatibilità Boost GCC spiega questo e ha collegamenti alle relative relazioni GCC difetto; vedi linea 77)

.

Se il codice ha bisogno di essere portatile, si dovrebbe essere molto attenti fare affidamento su di inizializzazione del valore; GCC non ha appoggiato pienamente fino a poco tempo e Visual C ++ non completamente supporta anche nella sua versione più recente, Visual C ++ 2010.

Altri suggerimenti

La dichiarazione

InStruct i; 

non lo fa invoke valore di inizializzazione

  

$ 8.5.3 / 10 - "Un oggetto il cui   inizializzatore è un insieme vuoto di   parentesi, cioè (), sono   il valore-inizializzato. "

Se si vuole il valore-inizializzazione, si richiederebbe un qualcosa di espressione come

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

esso ora! - Ideone supporta GCC-4.5.1

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top