Cela dit, j'ai l'impression que conceptuellement, ca se rapproche de ce pour quoi la notation a ete faite, a savoir poser une information semantique (ici: 'tention, debordement de valeur possible), plus que ce pour quoi elle est generalement utilisee (donner le type).
Justement non, c'est en sachant le type (dw et w) que j'arrives a savoir si le code a un probleme ou pas.
T'aurais le meme pb avec des int ou des longs non?
L'information vehiculee serait la meme, mais ecrite differement, ce qui laisserais penser que la notation n'est pas adaptee.
Oui, et la notation marcherait tout autant, le fait de voir les types permet de juger ce qui va arriver lors de l'operation. Ne pas savoir quels sont les types empeche cette analyse immediate.
Apres, j'aurais tendance a dire que si debordement de valeur tu as, mauvais choix de type tu as fait en premier lieu. Surtout sur une length (oui, je sais c'est un exemple, mais bon...).
Je concois que le debordement puisse ne pas avoir d'impact semantique dans certains cas, autant une length qui deborde et devient negative, c'est que mettre ta length sur un dw etait pas un bon choix et qu'il te fallait un int ou un long ou un whatever.
Je me trompe?
Oui tu te trompes :)
Le fait que ta longueur peut depasser la taille du type est un cas courant (integer overflow), la solution dans la plupart des cas ce n'est pas de changer de type (il y aura toujours un chiffre plus grand que ton type, nombre de protocols ont des champs 64bits et aucun compilo ne gere des entiers >64bit en natif), mais verifier que l'addition ne depasse la capacite du type dans les cas ou l'overflow est possible.
Autre avantage :
a) wstring wsText1, wsText2;
wsText1=wsText2;
b) wstring *Text1, *Text2;
Text1=Text2;
c) wstring *lpwsText1, *lpwsText2;
lpwsText1=lpwsText2;
Tu vois la difference ?
Cas a) Tu connais le type, tu sais que ton objet 1 prend la valeur de l'objet 2 et que modifier une variable n'affecte pas l'autre.
Cas b) Tu ne connais rien du type, t'as 2 pointeurs sur le meme objet ou t'as 2 objets separes que tu peux detruire separement ?
Cas c) Tu sais que tes 2 variables sont des pointeurs qui pointent sur le meme objet, que donc faire un delete sur les 2 variables cause un double free et changer l'objet change ce qui est pointe par les 2 variables.
[^] # Re: Une carrière assurée
Posté par pasBill pasGates . En réponse au journal Les 25 erreurs de programmation les plus dangereuses. Évalué à 1.
Justement non, c'est en sachant le type (dw et w) que j'arrives a savoir si le code a un probleme ou pas.
T'aurais le meme pb avec des int ou des longs non?
L'information vehiculee serait la meme, mais ecrite differement, ce qui laisserais penser que la notation n'est pas adaptee.
Oui, et la notation marcherait tout autant, le fait de voir les types permet de juger ce qui va arriver lors de l'operation. Ne pas savoir quels sont les types empeche cette analyse immediate.
Apres, j'aurais tendance a dire que si debordement de valeur tu as, mauvais choix de type tu as fait en premier lieu. Surtout sur une length (oui, je sais c'est un exemple, mais bon...).
Je concois que le debordement puisse ne pas avoir d'impact semantique dans certains cas, autant une length qui deborde et devient negative, c'est que mettre ta length sur un dw etait pas un bon choix et qu'il te fallait un int ou un long ou un whatever.
Je me trompe?
Oui tu te trompes :)
Le fait que ta longueur peut depasser la taille du type est un cas courant (integer overflow), la solution dans la plupart des cas ce n'est pas de changer de type (il y aura toujours un chiffre plus grand que ton type, nombre de protocols ont des champs 64bits et aucun compilo ne gere des entiers >64bit en natif), mais verifier que l'addition ne depasse la capacite du type dans les cas ou l'overflow est possible.
Autre avantage :
a) wstring wsText1, wsText2;
wsText1=wsText2;
b) wstring *Text1, *Text2;
Text1=Text2;
c) wstring *lpwsText1, *lpwsText2;
lpwsText1=lpwsText2;
Tu vois la difference ?
Cas a) Tu connais le type, tu sais que ton objet 1 prend la valeur de l'objet 2 et que modifier une variable n'affecte pas l'autre.
Cas b) Tu ne connais rien du type, t'as 2 pointeurs sur le meme objet ou t'as 2 objets separes que tu peux detruire separement ?
Cas c) Tu sais que tes 2 variables sont des pointeurs qui pointent sur le meme objet, que donc faire un delete sur les 2 variables cause un double free et changer l'objet change ce qui est pointe par les 2 variables.