Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

size_t - czy dobrze rozumiem co ten typ robi?

Ostatnio zmodyfikowano 2016-11-11 00:18
Autor Wiadomość
MDK
Temat założony przez niniejszego użytkownika
size_t - czy dobrze rozumiem co ten typ robi?
» 2016-11-08 01:59:09
W 27 rozdziale kursu pojawia się typ danych size_t. Wszędzie pisze, że jest to typ zwracany przez sizeof(). Ale co do tego, w jakich sytuacjach i po co go używać ciężko znaleźć jakieś łatwe do zrozumienia wyjaśnienia.

I teraz, jeśli mamy np.
C/C++
size_t zmienna = 1; // Tutaj jak rozumiem automatycznie przybierze typ bool?
size_t zmienna2 = 25000 // A tutaj będzie typ int?
 Jeśli dobrze rozumiem, size_t dobiera najlepszy typ zmiennej do sytuacji, tak? Czy to oznacza, że zamiast używać wszystkich typów unsigned, lepiej używać size_t?


Dlaczego w tym przykładzie nie został użyty int lub unsigned int, tylko size_t?
C/C++
#include <string>
#include <iostream>

void szukajZnaku( std::string & tekst, char szukanyZnak )
{
    size_t znalezionaPozycja = tekst.find( szukanyZnak );
    if( znalezionaPozycja == std::string::npos )
         std::cout << "Nie znaleziono znaku w tekscie" << std::endl;
    else
         std::cout << "Znak zostal odnaleziony na pozycji " << znalezionaPozycja << std::endl;
   
}

int main()
{
    std::string naszTekst = "Przyklad z kursu C++ (http://cpp0x.pl)";
    szukajZnaku( naszTekst, 'k' ); //szuka litery 'k' w tekście
    return 0;
}
P-153473
carlosmay
» 2016-11-08 08:52:45
std::size_t
C/C++
namespace std {
    typedef unsigned int size_t;
}
P-153474
MDK
Temat założony przez niniejszego użytkownika
» 2016-11-08 18:03:47
Czyli unsigned int i size_t to jedno i to samo? W jakich sytuacjach lepiej używać jednego, a w jakich drugiego?

edit:

Obejrzałem pewne wideo na youtube dotyczące size_t.
https://www.youtube.com/watch?v=4afySnY-XgY

I tam ktoś dowodzi, że używanie w size_t typu unsigned jest błędem. To czy lepiej obejść się bez niego?

Może te pytania są rąbnięte ale kompletnie nie rozumiem size_t.
P-153481
carlosmay
» 2016-11-08 22:19:23
I tam ktoś dowodzi, że używanie w size_t typu unsigned jest błędem. To czy lepiej obejść się bez niego?
Nieostrożnie działanie na
unsigned int
 lub
std::size_t
 może przysporzyć kłopotów,
ale nie obejdziesz się bez niego. Praktycznie cała biblioteka standardowa używa typu
std::size_t
 do określania
rozmiaru, pozycji w kolekcji, odległości między iteratorami itd. Kompilatory będą ostrzegać jeśli będziesz porównywać bądź próbować przypisać typ bez znaku do typu ze znakiem.
P-153490
michal11
» 2016-11-08 23:06:09
Najprościej mówiąc to
size_t
 to inna nazwa na typ całkowity bez znaku czyli
unsigned int
 tyle, nie ma tam żadnej magii. Możesz używać zamiennie
size_t
 i
unsigned int
 dla kompilatora to nie ma żadnej różnicy, jedynie będzie się taki kod słabo czytało.
P-153492
Elaine
» 2016-11-08 23:12:40
C/C++
namespace std {
    typedef unsigned int size_t;
}
Absolutnie nie.

18.2/6:
The type size_t is an implementation-defined unsigned integer type that is large enough to contain the size in bytes of any object.

To, jaki typ jest w stanie przechować rozmiar każdego obiektu w bajtach, z oczywistych powodów silnie zależy od implementacji. Nie zawsze jest to unsigned int: na systemie, z którego piszę ten post, unsigned int ma 32 bity, a obiekty mogą być znacznie większe niż 2^32 bajtów, dlatego size_t to 64-bitowy unsigned long. Na 64-bitowym Windowsie size_t to unsigned long long (bo unsigned long ma tam 32 bity). Wydaje mi się też, że widziałem platformy, gdzie size_t był aliasem na unsigned short.
P-153493
michal11
» 2016-11-08 23:16:44
@up

cenna uwaga ale obawiam się, że dla osoby która tego w ogóle nie rozumie, czyli dla autora tematu, może to tylko namieszać zamiast wyjaśniać.
P-153494
MDK
Temat założony przez niniejszego użytkownika
» 2016-11-08 23:23:58
Czyli, jeśli dobrze rozumię:
1. size_t jest typem danych, podobnie, jak bool, integer, czy long ( do tej pory myślałem, że przyjmuje on jakoś dynamicznie wielkość w zależności od wielkości zmiennej - przez to miałem największy mętlik w głowie).
2. Reprezentuje typ unsigned.
3. Ma stałą wielkość w ramach konkretnego systemu operacyjnego.

Czy dobrze myślę?
P-153495
« 1 » 2
  Strona 1 z 2 Następna strona