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

question-closed Pytanie dotyczące składni w C++

Object Storage Arubacloud
+2 głosów
88 wizyt
pytanie zadane 17 kwietnia w C i C++ przez polandonion Mądrala (7,040 p.)
zamknięte 17 kwietnia przez polandonion

Witam, mam pytanko dotyczące stosowania przecinka w C++, ale nie jako separator argumentów funkcji. Może podam od razu przykład: w moim programie występuje funkcja

int bin_to_dec(string bin)

Pewnie każdy pisał już coś takiego w swoim życiu, ale tak dla przypomnienia: jest to funkcja zamieniająca liczbę binarną, zapisaną jako tekst, na liczbę w systemie dziesiętnym. I tutaj pojawia się problem, bo w moim kodzie występuje taka pętla:

int bin_to_dec(string bin) {
    int wynik = 0, pot = 1;
    for (int i = bin.size() - 1; i >= 0; i --)
        wynik += (int)((bin[i] != '0') * pot), pot *= 2;
    return wynik;
}

Nauczyciel mówił mi, że ten przecinek w 4. linijce nie determinuje kolejności wykonania operacji, czyli łatwiejszym językiem: powiedział, że te dwie operacje niekoniecznie muszą się wykonać w tej kolejności jak ja to napisałem. Chciałem to sprawdzić i kilkanaście razy odpaliłem program i wszystko działa. Na internecie nie mogłem znaleźć potwierdzenia tezy mojego nauczyciela, a chciałbym zaznaczyć, że kolejność wykonania operacji w tej funkcji jest kluczowa. I tutaj, wreszcie, dobrnąłem do mojego pytania: Czy przecinek w tym przypadku rzeczywiście nie gwarantuje tego, że te dwie operacje wykonają się w kolejności przeze mnie napisanej?

Dziękuję z góry za odpowiedzi i pozdrawiam, Adam :D

komentarz zamknięcia: Pytanie znalazło już odpowiedź
1
komentarz 18 kwietnia przez Oscar Nałogowiec (29,320 p.)
edycja 18 kwietnia przez Oscar

Chciałem to sprawdzić i kilkanaście razy odpaliłem program i wszystko działa.

W tego typu wątpliwościach dotyczących kolejności wykonywania operacji chodzi o to, że jeśli nie jest to określone w standardzie to różne kompilatory mogą wykonywać to różnie. Ale raz skompilowany kod będzie już zawsze taki sam - kompilator nie wrzuci tam jakiegoś randoma, by losował kolejność działań. Sprawdzenie "doświadczalne", aczkolwiek i tak niczego nie rozstrzygające, powinno polegać na skompilowaniu i sprawdzeniu różnymi kompilatorami na różnych platformach.

jest to funkcja zamieniająca liczbę binarną, zapisaną jako tekst, na liczbę w systemie dziesiętnym

 

Tak dla formalności - taka funkcja nigdzie nie zamienia na system dziesiętny. Ona bierze postać tekstową liczby w zapisie binarnym i oblicza jej wartość numeryczną. A jak ta wartość jest zapisana w komputerze? Oczywiście najczęściej dwójkowo.

Ona powinna się nazywać bin_2_int.

1 odpowiedź

+3 głosów
odpowiedź 17 kwietnia przez toko Dyskutant (7,670 p.)
edycja 17 kwietnia przez toko
 
Najlepsza

Jeżeli poprawnie zrozumiałem problem, chodzi o to, że dodanie do wyniku oraz pomnożenie potęgi mogą być odwrotnie. Według cppreference tak nie jest:

Built-in comma operator

The comma operator expressions have the form

E1 , E2

In a comma expression E1, E2, the expression E1 is evaluated, its result is discarded (although if it has class type, it won't be destroyed until the end of the containing full expression), and its side effects are completed before evaluation of the expression E2 begins [(note that a user-defined operator, cannot guarantee sequencing)(until C++17)].

Zgodnie z tym Twój program wykona się w dobrej kolejności.

komentarz 17 kwietnia przez polandonion Mądrala (7,040 p.)
Dzięki za odpowiedź. To było to, czego szukałem

Podobne pytania

+1 głos
1 odpowiedź 887 wizyt
pytanie zadane 27 lutego 2022 w C i C++ przez Ciawes Użytkownik (530 p.)
0 głosów
2 odpowiedzi 1,520 wizyt
0 głosów
1 odpowiedź 567 wizyt
pytanie zadane 22 listopada 2019 w Inne języki przez NieMaJuzNazw Użytkownik (890 p.)

92,592 zapytań

141,440 odpowiedzi

319,698 komentarzy

61,975 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...