Do Ideone et CodePad vraiment pas soutenir C ++ 03?
-
29-09-2019 - |
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";
}
Est-ce que cela veut dire qu'aucun d'eux ne prennent en charge C ++ 03 Valeur fonction d'initialisation?
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