Do Ideone e CodePad davvero non supportare C ++ 03?
-
29-09-2019 - |
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";
}
Questo significa che nessuno di loro sostengono funzione di inizializzazione 03 valore C ++?
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