• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Kiedy używać nowych typów danych c++

42 Warsaw Coding Academy
0 głosów
1,049 wizyt
pytanie zadane 10 sierpnia 2020 w C i C++ przez Sevence Początkujący (280 p.)
edycja 10 sierpnia 2020 przez Sevence

Cześć,

Jestem nowym studentem C++ i podczas zapoznawania się z nowymi typami utknąłem. Mam parę pytać na które nie mogę znaleźć jasnej dla mnie odpowiedzi, dlatego postanowiłem napisać tu. 

 

Od C++11 weszły nowe typy danych. Chciałbym zrozumieć, kiedy warto z nich skorzystać.

Typy: int8_t, int16_t, int32_t, int64_t

Typy: int_fast8_t, int_fast16_t, int_fast32_t, int_fast64_t, 

Typy: int_least8_t, int_least16_t, int_least32_t, int_least64_t,

 

Parę pytań odnośnie nowych typów:

Czym się różni np. typ int od int32_t?

Czy w najnowszych standardach powinno się korzystać tylko z tych nowych typów?

Z tego co się orientuje typ int ma ilość bitów w zależności od kompilatora, także po co tyle nowych typów?

Kiedy warto skorzystać z nowych typów? 

Przykładowo mam system który działa tylko w architektorzy 32 bitowej zatem czy mam używać zawsze int32_t?

Czym się różnią te nowy typy od siebie  int32_t vs int_fast32_t vs int_least32_t?

 

Będę bardzo wdzięczny za wyjaśnienie tego zagadnienia osobie która się dopiero uczy. 

Zależy mi aby wypowiedział się ktoś doświadczony w temacie. 

komentarz 10 sierpnia 2020 przez manjaro Nałogowiec (37,390 p.)
Fajnie byłoby jakbyś nie zmieniał domyślnych ustawień zcionki.
komentarz 10 sierpnia 2020 przez Sevence Początkujący (280 p.)
To po co forum udostępnia taką opcją skoro nie można z niej korzystać?
komentarz 10 sierpnia 2020 przez Oscar Nałogowiec (29,360 p.)

@Sevence,
 to nie są żadne nowy typy danych, to wszystko było w zwykłym C w pliku stdint.h (no, może bez tych 64bit)

komentarz 11 sierpnia 2020 przez j23 Mędrzec (195,240 p.)

@Oscar, "nowe" w C++ (w sensie, że są częścią standardu).

1 odpowiedź

+1 głos
odpowiedź 10 sierpnia 2020 przez tangarr Mędrzec (155,180 p.)

Typy intX_t mają dokładnie X bitów
Typy int_fastX_t są najszybszymi (dla procesora) typami o długości przynajmniej X bitów
Typy int_leastX_t są najmniejszymi typami zawierającymi przynajmniej X bitów

Dokumentacja https://en.cppreference.com/w/cpp/types/integer

Rozmiary standardowych typów (char, short, int, long, long long) są zależne od implementacji i platformy. Utrudnia to pisanie programów wieloplatformowych.
Typy intX_t są szczególnie pomocne podczas projektowania binarnych formatów danych (dodatkowo trzeba pamiętać o różnej kolejności zapisu danych na różnych platformach - little endian/big endian)

komentarz 10 sierpnia 2020 przez Sevence Początkujący (280 p.)
@tangarr Jak tworzę aplikację która jest uruchamiana w środowisku 32 bitowym to warto użyć tych precyzyjnych typów? Jest jakaś różnica względem wydajności int vs int32_t lub int32_t vs int_fast32_t?
1
komentarz 10 sierpnia 2020 przez tkz Nałogowiec (42,020 p.)
edycja 10 sierpnia 2020 przez tkz

Jeszcze dodam, że dla niestandardowych maszyn, na przykład 36 bitowych maszyn int8_t nie istnieje. Warto doczytać o czymś takim jak padding w C/C++. 

Najczęściej z precyzyjnym wyrażeniem długości typu spotkasz się w systemach wbudowanych.

#include <cinttypes>
int main()
{
    int a=8;
    int_fast64_t v=8;
}
main:
        push    rbp
        mov     rbp, rsp
        mov     DWORD PTR [rbp-4], 8
        mov     QWORD PTR [rbp-16], 8
        mov     eax, 0
        pop     rbp
        ret

Jeżeli gdzieś strzelę gafę, to proszę poprawić. Przy int_fast procesor rozkłada zapis zmiennej na 16 bitów, co przy czytaniu daje pełną ramkę, co przyśpiesza czyatanie z pamięci cash procesora. 

komentarz 10 sierpnia 2020 przez tangarr Mędrzec (155,180 p.)
Jeżeli dokładny rozmiar danych cię nie interesuje to używaj standardowych typów.

Podobne pytania

+3 głosów
1 odpowiedź 553 wizyt
pytanie zadane 7 lutego 2023 w SQL, bazy danych przez zbiku25 Gaduła (3,000 p.)
+1 głos
1 odpowiedź 945 wizyt
pytanie zadane 4 stycznia 2020 w C# przez startCoding Obywatel (1,210 p.)
0 głosów
1 odpowiedź 512 wizyt
pytanie zadane 13 marca 2017 w C i C++ przez Deloryn Bywalec (2,060 p.)

93,389 zapytań

142,385 odpowiedzi

322,547 komentarzy

62,749 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...