Wpis z mikrobloga

#programowanie #cpp

Hmm, dlaczego ludzie używają sizet zamiast inta? Przykładowo widzę jakiś szablon pojemnika, który ma przechowywać N elementów jakiegośtam typu. No to myk myk , natomiast zamiast int N widzę sizet N. Czemu? Przecież i tak potem w środku w konstruktorze tworzymy tablicę typu T z liczbą elementów [N], więc dostosuje rozmiar każdego elementu tablicy do typu T jakikolwiek by nie był.
  • 32
@klupek: Zrobiłeś jakiś skrót myślowy, i Twoją wypowiedz można rozumieć dwojako :) Wolę się utwierdzić, że nie optujesz za opcją, że nie można obsłużyć większej ilości danych, tylko, że size_t może rozwiązać problem za małego inta.
@Kaczus2B: Ok, prawdopodobnie niejasno opisałem (jak zawsze), optuje za tym, żeby używać prawidłowego typu danych do danego zadania, czyli size_t do wszelkiego rodzaju rozmiarów (tablic też).
@Khaine: To ja jeszcze podsumuję, bo za mało postów ;)

Powody do istnienia i używania size_t:

1. Czytelność. Użycie size_t daje jasno do zrozumienia, że dana wartość jest wielkością jakiegoś obszaru pamięci albo liczbą elementów, a nie jakąś tam losową liczbą.

2. Unifikacja. Istnienie size_t rozwiązuje wątpliwości, jakiego konkretnie typu użyć w takich przypadkach. Dzięki temu zmniejsza się szansa np. na mieszanie zmiennych ze znakiem i bez znaku, które to
* minimum value for an object of type int INT_MIN -32767

* maximum value for an object of type int INT_MAX +32767


@KrzaQ2: Naprawdę? Może mam sklerozę, ale zawsze używałem intów z przekonaniem, że mają 32 bity... i miały.
@frax: Masz sklerozę w kompilatorach dosowych były 16 bit, w Amigowych kompilatorach było do wyboru..
@KrzaQ2: Musiałbym poszukać, ale widziałem książki, gdzie było 8=sizeof(char)<=sizeof(short)<=sizeof(int)<=sizeof(long)
ha i ponoc byl jakis kompilator z int 8 bitów (jako ciekawoostka bylo podawane) na jakis uklad programowalny to byl kompilator.
@Kaczus2B: Cóƶ, w tej sytuacji raczej błędu szukałbym w ksiąƶce, a nie w standardzie. Btw, to jest CHAR_BIT = bits-char <= ... reszta, a CHAR_BIT wcale nie musi być 8 (musi być za to minimum 8)
@Kaczus2B: O, człowieku, w tych czasach to ja jeszcze "komputel" mówiłem, albo i nawet tego nie :)

Mi chodziło tylko o C++03, a napisałem o sklerozie, bo od początku studiów C++ używam coraz mniej, i nie zdziwiło by mnie, gdybym jakieś oczywistości poprzekręcał.