• 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++

0 głosów
167 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 (34,980 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 Pasjonat (20,850 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 (166,180 p.)

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

1 odpowiedź

+1 głos
odpowiedź 10 sierpnia 2020 przez tangarr VIP (136,880 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 (40,840 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 VIP (136,880 p.)
Jeżeli dokładny rozmiar danych cię nie interesuje to używaj standardowych typów.

Podobne pytania

+1 głos
1 odpowiedź 397 wizyt
pytanie zadane 4 stycznia 2020 w C# przez startCoding Obywatel (1,210 p.)
0 głosów
1 odpowiedź 187 wizyt
pytanie zadane 13 marca 2017 w C i C++ przez Deloryn Bywalec (2,060 p.)
0 głosów
0 odpowiedzi 83 wizyt
pytanie zadane 31 października 2018 w SQL, bazy danych przez Grzegorz Mikina Mądrala (6,870 p.)

85,873 zapytań

134,644 odpowiedzi

298,914 komentarzy

56,739 pasjonatów

Advent of Code 2021

Top 15 użytkowników

  1. 926p. - rucin93
  2. 925p. - Whistleroosh
  3. 912p. - nidomika
  4. 876p. - adrian17
  5. 867p. - Michal Drewniak
  6. 866p. - Mikbac
  7. 863p. - Mateusz Bogdan
  8. 859p. - CC PL
  9. 797p. - Argeento
  10. 704p. - ScriptyChris
  11. 683p. - tokox
  12. 660p. - Vinox
  13. 645p. - TheLukaszNs
  14. 642p. - s. Dorota Kowalewska
  15. 601p. - Marcin Harasimowicz
Szczegóły i pełne wyniki

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...