2011-02-16 1 views
3

J'utilise un simple membre de la classe Bool Pointeur. Assigner un faux resp. true se comporte différemment - voir les commentaires dans le code. Je décompte un pour tester l'autre ci-dessous.Le comportement du membre du pointeur booléen est différent lors de l'assignation de true à false

J'utilise appel compilateur g++ -o basic basic.cpp

class Test 
{ 
public: 
    int a; 
    bool* abool; 
}; 


int main() { 
    Test t; 

    //t.abool = false;    // WORKS 
    //t.abool = true;    // ERROR: cannot convert 'bool' to 'bool*' in assignment - expected IMO; 

    // this should work for both values IMO 
    //*(t.abool) = true;   // Segmentation fault 
    //*(t.abool) = false;   // Segmentation fault 



    cout << t.abool << endl; 

    return 0; 
} 
+0

l'a obtenu. thx les gars! – groovehunter

Répondre

10

C'est parce qu'une conversion existe false-0. Donc, il devient t.abool = 0; qui initialise abool avec NULL. Toutefois, true convertit en 1 et puisque vous ne pouvez pas initialiser le pointeur avec un entier absolu, vous obtenez une erreur de compilation. Dans le second cas (avec commentaire, cela devrait fonctionner IMO), vous obtiendrez une erreur de segmentation lorsque vous essayez de déréférencer un pointeur unitalisé qui invoque un comportement indéfini.

6

Vous n'avez pas été initialisé bool* pour indiquer quoi que ce soit.

Vous pouvez assigner une valeur de pointeur NULL (qui false convertira à), ou un pointeur valide à un objet bool:

bool test; 

t.abool = 0; // or NULL 
t.abool = &test; 

Une fois qu'il est pointant un objet bool réel que vous pouvez attribuer une valeur bool à cet objet par le pointeur:

*t.abool = true; 
*t.abool = false; 
1

faux travaux parce que faux est probablement considéré comme 0 par g ++

+0

Il n'y a aucune probabilité ici, c'est. – GManNickG

1

Tout littéral de type numérique et de valeur zéro peut être implicitement converti en un pointeur NULL. bool est un type numérique et false a la valeur zéro. Les valeurs non nulles (telles que true) ne peuvent pas être implicitement converties en pointeur.

Questions connexes