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ść
Monika90
» 2016-11-09 00:01:09

C/C++
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;

Użycie unsigned int spowodowałoby nieprawidłowe działanie tego kodu gdyby go skompilować dla systemu, w którym size_t jest 64 bitowe, a unsigned int 32. Warunek w if byłby zawsze fałszywy, ponieważ wartość std::npos, zwrócona przez find, uległaby zniekształceniu po konwersji do unsigned int.

Tak więc zamiast komunikatu że nie znaleziono znaku dostałbyś

Znak zostal odnaleziony na pozycji 4294967295
P-153496
pekfos
» 2016-11-09 20:04:33
2. Reprezentuje typ unsigned.
3. Ma stałą wielkość w ramach konkretnego systemu operacyjnego.
Reprezentuje jakiś typ unsigned. W C++ każdy typ ma stałą wielkość, ale ta wielkość nie musi być z góry znana. W nagłówku <cstdint> są zdefiniowane aliasy o nazwach rodzaju int32_t. Jeżeli chcesz użyć liczby ze znakiem i masz potrzebę, by miała dokładnie 32 bity, bezpieczniej jest użyć takiego aliasu, a nie po prostu int, nawet jeśli sprawdzałeś rozmiar operatorem sizeof i akurat ma 32 bity. Takie rzeczy mają znaczenie, gdy program, który piszesz, ma się kompilować i działać na innej maszynie, gdzie rozmiary typów podstawowych mogą być inne. size_t, int32_t itp dają pewne gwarancje co do tego, do czego możesz takiego typu użyć: size_t pomieści rozmiar dowolnego obiektu, int32_t pomieści 32-bitową liczbę ze znakiem. Aliasów na typy podstawowe jest zawsze dużo więcej, niż typów podstawowych.
P-153519
Elaine
» 2016-11-10 00:40:34
int32_t pomieści 32-bitową liczbę ze znakiem
A dokładniej: 32-bitową liczbę całkowitą ze znakiem, bez żadnych bitów paddingu i korzystającą z dopełnienia do dwóch (ISO/IEC 9899:1999, 7.18.1.1).
P-153534
MDK
Temat założony przez niniejszego użytkownika
» 2016-11-11 00:18:37
Dzięki za pomoc. Udało mi się przez to przebić :-) Zamykam.
P-153554
1 « 2 »
Poprzednia strona Strona 2 z 2