Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [C++] Differenze: unsigned, size_t, size_type

    Come da titolo: che differenze ci sono essenzialmente tra unsigned, size_t e size_type?

    Quando è più corretto preferire l'utilizzo di uno piuttosto che di un altro?

    Grazie.

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    unsigned è un int senza segno.
    size_t è sinomino di unsigned int
    size_type è sinonimo di size_t nei container STL.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  3. #3
    In linea di massima:
    unsigned {int/long/short/char} quando ti serve un intero senza segno, ad esempio per comunicare semanticamente che si tratta di un valore che non può mai essere negativo (anche se quest'uso da alcuni non è ben visto); viene usato spesso nelle strutture scritte su file.

    size_t quando stai ragionando sulle dimensioni di un qualche oggetto (valori restituiti da sizeof) e, per estensione, volendo anche quando iteri su un array, visto che, se in un size_t ci possono stare le dimensioni dell'array, sicuramente ci starà anche l'indice di qualunque elemento, che è un loro sottomultiplo (occhio che se iteri *al contrario* su un array con tipi senza segno rischi di fare casino).

    size_type per gli stessi usi, ma se stai lavorando su un container STL. In linea del tutto teorica size_t e i vari size_type potrebbero essere diversi, ma se non erro da qualche parte nello standard c'è qualche requisito che di fatto impone implicitamente che siano uguali.

    Evita di usare un unsigned int "a caso" al posto di size_t/size_type, dal momento che non è detto che l'unsigned int che hai scelto sia abbastanza grande; inoltre, l'idea dietro a questi tipi "specializzati" è che abbiano anche un uso semantico, cioè, io vedo un size_t e so subito che non si tratta del numero di mele caricate su un camion, di un bitfield o di chissà cos'altro, ma che è la dimensione in byte di qualcosa o l'indice in un array.
    Originariamente inviato da shodan
    size_t è sinomino di unsigned int
    No. size_t è un tipo senza segno che garantisce di poter specificare le dimensioni di qualunque variabile/tipo; lo standard C++ (§18.1.3) rimanda allo standard C per quanto riguarda size_t, e lì (§7.17.2) si dice che
    size_t [...] is the unsigned integer type of the result of the sizeof operator
    Non c'è nessuna garanzia che si tratti nello specifico di un unsigned int, si dice semplicemente che deve essere un intero senza segno (è più chiaro a §6.5.3.4.4:
    The value of the result is implementation-defined, and its type (an unsigned integer type)
    is size_t, defined in <stddef.h> (and other headers).
    , e sempre in §7.12 poco dopo si evince che non si specifica un rango di conversione particolare, ma che solitamente non dovrebbe essere sopra il long).
    Amaro C++, il gusto pieno dell'undefined behavior.

  4. #4
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Impeccabile. Però se lo spieghi a un niubbo attraverso lo standard, prima fa: , poi e infine

    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  5. #5
    Verissimo. Infatti la prima parte era il "nitpicker corner" (a frequentare Stack Overflow si finisce ad essere sensibili a queste cose, credo che sia il primo sito dove ho usato il carattere § ), la seconda era la "vera" risposta. Comunque, ora le scambio, così la risposta risulta più comprensibile.
    Amaro C++, il gusto pieno dell'undefined behavior.

  6. #6
    Grazie MItaly,
    non potevi essere più chiaro!

  7. #7
    Originariamente inviato da GliderKite
    Grazie MItaly,
    non potevi essere più chiaro!
    Non c'è di che, ciao!
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.