size_t - czy dobrze rozumiem co ten typ robi?
Ostatnio zmodyfikowano 2016-11-11 00:18
Monika90 |
» 2016-11-09 00:01:09
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
|
|
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. |
|
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). |
|
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. |
|
1 « 2 » |