Vra

Wanneer is dit gepas om 'n ongetekende veranderlike oor 'n getekende een te gebruik?Wat van in 'n for lus?

Ek hoor baie menings hieroor en ek wou kyk of daar iets is wat na 'n konsensus lyk.

for (unsigned int i = 0; i < someThing.length(); i++) {  
    SomeThing var = someThing.at(i);  
    // You get the idea.  
}

Ek weet dat Java nie ongetekende waardes het nie, en dit moes 'n bewuste besluit gewees het oor Son Mikrostelsels' deel.

Was dit nuttig?

Oplossing

Ek was bly om te vind 'n goeie gesprek oor hierdie onderwerp, aangesien ek nie regtig voorheen daaraan gedink het nie.

Ter opsomming, geteken is 'n goeie algemene keuse - selfs wanneer jy doodseker is dat al die syfers positief is - as jy rekenkunde op die veranderlike gaan doen (soos in 'n tipiese lusgeval).

As jy bietjiesgewys dinge soos maskers gaan doen, begin ongetekende meer sin maak.Of, as jy desperaat is om daardie ekstra positiewe reeks te kry deur voordeel te trek uit die tekenbit.

Persoonlik hou ek van geteken omdat ek myself nie vertrou om konsekwent te bly en die twee tipes te meng nie (soos waarteen die artikel waarsku).

Ander wenke

In jou voorbeeld hierbo, wanneer 'i' altyd positief sal wees en 'n hoër reeks voordelig sal wees, sal ongetekende nuttig wees.Soos as jy 'verklaar'-stellings gebruik, soos:

#declare BIT1 (unsigned int 1)
#declare BIT32 (unsigned int reallybignumber)

Veral wanneer hierdie waardes nooit sal verander nie.

As jy egter 'n rekeningkundige program doen waar die mense onverantwoordelik met hul geld is en voortdurend in die rooi is, sal jy beslis 'geteken' wil gebruik.

Ek stem egter saam met heilige dat 'n goeie reël is om onderteken te gebruik, wat C eintlik verstek, so jy is gedek.

C en C++ samestellers sal 'n waarskuwing genereer wanneer jy getekende en ongetekende tipes vergelyk;in jou voorbeeldkode kon jy nie jou lus-veranderlike ongeteken maak en die samesteller kode sonder waarskuwings laat genereer nie (met die veronderstelling dat genoemde waarskuwings aangeskakel is).

Natuurlik stel jy saam met waarskuwings wat heeltemal opgeskuif is, reg?

En het jy dit oorweeg om saam te stel met "behandel waarskuwings as foute" om dit so 'n stap verder te neem?

Die nadeel met die gebruik van getekende nommers is dat daar 'n versoeking is om dit te oorlaai sodat, byvoorbeeld, die waardes 0->n die kieslyskeuse is, en -1 beteken niks is gekies nie - eerder as om 'n klas te skep wat twee veranderlikes het, een tot dui aan of iets gekies is en 'n ander om te stoor wat daardie seleksie is.Voordat jy dit weet, toets jy oral vir negatiewe een en die samesteller kla oor hoe jy die spyskaartkeuse wil vergelyk met die aantal spyskaartkeuses wat jy het - maar dit is gevaarlik omdat dit verskillende tipes is .Moet dit dus nie doen nie.

Ek sou dink dat as jou sakesaak bepaal dat 'n negatiewe getal ongeldig is, jy sou wil hê om 'n fout te laat wys of gooi.

Met dit in gedagte het ek eers onlangs uitgevind oor ongetekende heelgetalle terwyl ek aan 'n projek gewerk het wat data in 'n binêre lêer verwerk en die data in 'n databasis stoor.Ek was doelbewus besig om die binêre data te "korrupteer", en het uiteindelik negatiewe waardes gekry in plaas van 'n verwagte fout.Ek het gevind dat alhoewel die waarde omgeskakel is, die waarde nie geldig was vir my besigheidsgeval nie.
My program het nie foute gemaak nie, en ek het uiteindelik verkeerde data in die databasis gekry.Dit sou beter gewees het as ek gebruik het uint en het die program misluk.

size_t is dikwels 'n goeie keuse hiervoor, of size_type as jy 'n STL-klas gebruik.

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top