J'avais déclaré une variable booléenne bool abc;
Dans une classe et je pensais que ce serait faux par défaut. Une condition if dans mon programme if (abc)
s'est avérée être vraie, donc j'ai sorti la valeur de abc et j'ai vu qu'elle contenait la valeur 55. Est-ce normal? Faut-il toujours attribuer 'bool abc = false' pour être sûr que c'est faux?
Oui, vous devez toujours initialiser vos variables. Jusqu'à ce que vous appreniez intimement les moments où il est et n'est pas nécessaire de le faire explicitement, vous devez le faire tout le temps, quoi qu'il arrive. Et d'ici là ... eh bien ... pourquoi arrêter une bonne habitude?
Pour initialiser un booléen sur false, il suffit de le construire par défaut:
struct X
{
bool b;
X() : b() {}
};
Parler de types de données intégrés primitifs (bool, char, wchar_t, short, int, long, float, double, long double), selon la norme C++, seules les variables globales obtiennent par défaut valeur de zéro si elles ne sont pas explicitement initialisées.
Pour les variables locales, il n'est pas nécessaire que le compliant nettoie le contenu de la mémoire à laquelle elles sont affectées. Une variable locale - si elle n'est pas explicitement initialisée - contiendra une valeur arbitraire.
Seules les variables globales sont affectées de 0 (faux) par défaut, toutes les variables locales reçoivent une valeur non nulle, qui serait évaluée à vrai dans une variable booléenne.
Oui. Vous devez soit faire bool x=false
Soit bool x(false)
. Les primitives qui ne sont pas initialisées peuvent avoir N'IMPORTE QUELLE valeur.
voir wikipedia
Oui. [~ # ~] toujours [~ # ~] initialisez vos variables avant utilisation. Même si le langage garantit qu'ils auront des valeurs spécifiques. Si vous ne pouvez pas vous forcer, obtenez un compilateur qui se plaindra, puis faites-le faire. :)
Cependant, ne le faites pas initialisez les valeurs à moins que cela n'ait vraiment une signification pour qu'elles soient initialisées. Par exemple, si vous avez une boucle comme celle-ci (je ne dis pas que c'est du bon code, c'est juste un exemple):
int i = 0;
while ((i = getNum()) == 5)
{
}
N'initialisez pas i
à zéro comme je l'ai fait. Cela n'a aucun sens, et bien qu'il ferme le compilateur, il introduit la possibilité que vous l'oublieriez et que votre code sera foiré. Si vous pouvez vous forcer à initialiser uniquement au bon moment - ni plus, ni moins - alors vous rendrez le débogage beaucoup plus facile, car votre le mauvais code sera regardez faux même en un coup d'œil .
Donc, en une seule ligne: ne jamais initialiser juste pour empêcher le compilateur de se plaindre, mais toujours initialiser avant utilisation.