Salut � tous.
Comment je pourrais v�rifier si une variable int est vide ou pas ? si on a pas encore donn� une valeur.
Salut � tous.
Comment je pourrais v�rifier si une variable int est vide ou pas ? si on a pas encore donn� une valeur.
Tu ne peux pas, mais tu peux fixer une valeur "sentinelle" � l'initialisation comme -1 ou 0. Ou encore utiliser un type "option".
Une variable, m�me non initialis�e poss�de une valeur. Tu peux le v�rifier simplementSi tu as vraiment besoin d'une variable qui ne poss�de pas de valeur quand non initialis�e, tu peux utiliser boost::optional.
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6 #include <iostream> int main() { int i; std::cout << i << std::endl; return 0; }
Merci pour les r�ponses.
L'application sera utiliser en cgi pour faire un site web.
Parfois depuis le visiteur, parfois depuis la base de donn�e, j'ai des valeurs vide qui viennent.
Et je dois faire des v�rifications pour faire les bonnes actions.
Sachant que pour un site web, on a pas mal de variable int � v�rifier, je sais pas quel bonne m�thode choisir.
(En langage C c'est pareil ?)
Tout d�pend de l'interface avec laquelle tu r�cup�res tes valeurs, en consultant la documentation tu peux savoir comment faire.
En g�n�ral, pour repr�senter une valeur vide, on utilise une paire <bool�en, valeur>. Le bool�en est � vrai si la valeur est initialis�e (par exemple, on peut aussi utiliser la convention inverse, le tout est de s�y tenir). boost optional est une solution, d�autant que comme c�est juste un en-t�te, ce n�est pas un probl�me � rajouter dans un projet.
Les solutions � base de valeur magiques ne sont pas g�niales, et posent pas mal de probl�mes, sauf si tu as la garantie que ta valeur � magique � est en dehors de l�intervalle des valeurs possibles (mais dans tous les cas, ce sera peu lisible).
Oui, c'est pareil en C, et dans beaucoup d'autres langages (PHP, java pour les types primitifs, etc.).
L'id�e c'est que les types primitifs ne correspondent � rien d'autre qu'un morceau de m�moire. L'identifiant d'une variable d�termine l'adresse de la variable (o� est-elle stock�e), son type d�termine sa taille (le nombre de bits utilis�s pour repr�senter sa valeur).
Donc, puisqu'une variable (dans le cas o� son type est primitif) correspond � un morceau de m�moire, c'est � dire une s�rie de bits, et que ces bits ont tous obligatoirement une valeur (0 ou 1), une variable a obligatoirement une valeur. D'o� la distinction entre la d�claration et l'initialisation d'une variable. Lorsqu'on d�clare une variable, on lui donne une adresse et un taille. Lorsqu'on l'initialise, on lui donne une valeur. En C++, une bonne pratique consiste � faire les deux en m�me temps, syst�matiquement: lorsqu'on d�clare une variable, on l'initialise (ce qu'on ne peut pas faire en C):
Dans ton cas, pour formaliser ce qui a d�j� �t� dit, il y a 3 solutions possibles:
Code : S�lectionner tout - Visualiser dans une fen�tre � part int ma_variable = 0;
1. Utiliser une valeur par d�faut pour chacune de tes variables. Cette valeur sera utilis�e pour l'initialisation (en m�me temps que la d�claration donc). Inconv�nient: il faut que cette valeur soit choisie de fa�on � ce que la variable ne puisse jamais �tre assign�e � cette valeur autre part qu'� son initialisation.
2. Encapsuler tes variables pour les lier avec un champ d�di�. Le simple est une paire (std::pair<bool, LeTypeDeMaVariable>) dont le premier �l�ment (le bool�en) d�termine si la variable a �t� initialis�e. Inconv�nient: petite perte de performance.
3. Utiliser boost::optional, que je ne connais pas donc je n'en connais pas les inconv�nients.
Partager