A c++ nyelvben miért van szükség size_t típusra? Nem lenne egyszerűbb unsigned long long intben tárolni a nagy értékeket? Vagy a size_t nagyobb mint az unsigned long long?
Az előző válaszolók is szépen leírták az okát, én már csak egy picit tudom kiegészíteni. A size_t mint típus nem 32 vagy 64 bites. Definíció (avagy a C/C++ szabvány) szerint egy size_t típusú változó el tudja tárolni a sizeof operátor visszatérési értékét.
Így a size_t típus maximális értékénél nagyobb méretű objektumot nem lehet létrehozni. Általában ez az érték a legnagyobb mérete egy tömbnek is, ezért szokás tömbök indexelésénél is size_t-t használni.
Az előnye ennek annyi, hogy ha azonos kódot akarsz fordítani egy 16 bites mikrokontrollerre, vagy egy 64 bites asztali gépre, akkor nem kell különböző típusú indexeket használnod, a size_t minden platformon a megfelelő típut fogja jelölni.
Ha egyszerűen egy nagy számot akarsz tárolni, aminek nincsen köze tömbök indexeléséhez, akkor valóban ajánlott más típust használni a size_t helyett. Ilyen lehet az általad említett unsigned long long, vagy ha pontosan meg akarod szabni a számok méretét, akkor az uint64_t (64 bites, unsigned integer).
A sizeof-ot tudod használni bonyolultabb típusok méretének lekérdezésére is.
Pl csak csinálj ennyit:
class X{
unsigned long long X1, X2, X3, X4, X5;
};
És a sizeof(X) máris jóval nagyobb számot ad majd vissza. Illetve ugyanez még mindig igaz a konstans méretű tömbökre is:
int arr[3000];
sizeof(arr);
Itt is jóval nagyobb számot fog visszaadni. C-ben és C++-ban a tömb is típusnak számít, így azoknak a maximális mérete is közvetlenül összefügg a size_t típus maximális értékével.
Kapcsolódó kérdések:
Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!