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

[c++] operator ? znak zapytania

Object Storage Arubacloud
0 głosów
2,018 wizyt
pytanie zadane 27 sierpnia 2019 w C i C++ przez soq72630 Nowicjusz (180 p.)

Wiem do czego służy operator pytajnika, ale w momencie gdy jest warunek typu a>b , a tutaj mamy a = 1? coś... nie rozumiem..
Jak to najprościej przetłumaczyć, o co w tym chodzi? Proszę o wyniki (sam je mam, ale chce sprawdzić wiarygodność toku myślenia)

I przykład:

#include<iostream>
using namespace std;
int main(){
	int a,b,c,d;
	a = 1 ? 2,3 : 4,5;
	b = 0 ? 2,3 : 4,5;
	c = (1 ? 2,3 : 4,5);
	d = (0 ? 2,3 : 4,5);
	int e = 1 ? 2,3 : 4,5;
	int f = 0 ? 2,3 : 4,5;
	int g = (1 ? 2,3 : 4,5);
	int h = (0 ? 2,3 : 4,5);}

II przykład:

#include<iostream>
using namespace std;
int main(){
	int a,b,c,d;
	a = 1 ? 2+3 : 4+5;
	b = 0 ? 2+3 : 4+5;
	c = (1 ? 2+3 : 4+5);
	d = (0 ? 2+3 : 4+5);
	int e = 1 ? 2+3 : 4+5;
	int f = 0 ? 2+3 : 4+5;
	int g = (1 ? 2+3 : 4+5);
	int h = (0 ? 2+3 : 4+5);
}

 

komentarz 27 sierpnia 2019 przez DragonCoder Nałogowiec (36,500 p.)
komentarz 27 sierpnia 2019 przez tangarr Mędrzec (154,860 p.)

@soq72630,

Przykład pierwszy się nie skompiluje.
Jeżeli chciałeś użyć liczb zmiennoprzecinkowych powinieneś użyć kropki do oddzielenia części całkowitej od ułamkowej.

a = 1 ? 2.3 : 4.5;

A jeżeli chciałeś użyć tam przecinka to kod powinien wyglądać tak:
 

a = 1 ? (2,3) : (4,5);

 

komentarz 27 sierpnia 2019 przez soq72630 Nowicjusz (180 p.)
nie, chcialem uzyc przecinka jako liczby zmiennoprzecinkowej i zapis jest poprawny, sprawdz w kompilatorze, ze z pierwszej linii wyjdzie 3, pytanie czemu tak?

 

zakladam ze jesli a=1 to wynik rowna sie 2,3 ale ktora z tych liczb? bo tu jest przecinek?

i skad mam wiedziec ze a=1 skoro jest losowmy intem, bez przypisanej wartosci wczesniej tak?
komentarz 27 sierpnia 2019 przez tangarr Mędrzec (154,860 p.)
Tutaj masz opisany operator przecinka: https://en.cppreference.com/w/cpp/language/operator_other#Built-in_comma_operator
W skrócie lewa wartość jest ewaluowana, lecz jej wynik jest pomijany. Wyrażenie zwraca prawą wartość.

1 odpowiedź

0 głosów
odpowiedź 27 sierpnia 2019 przez tangarr Mędrzec (154,860 p.)

Operator ?: ma ogólną postać:
warunek ? wynik_true : wynik_false
Warunkiem może być wyrażenie logiczne lub zmienna bool. Zmienne liczbowe są automatycznie rzutowane na bool.
Każda liczba niezerowa rzutuje na wartość true. Zero zawsze daje false.

komentarz 27 sierpnia 2019 przez soq72630 Nowicjusz (180 p.)
okej czyli zakladam ze jesli a=1 to wynik rowna sie 2,3 ale ktora z tych liczb? bo tu jest przecinek?

i skad mam wiedziec ze a=1 skoro jest losowmy intem, bez przypisanej wartosci wczesniej tak?
komentarz 27 sierpnia 2019 przez tangarr Mędrzec (154,860 p.)

To się nie skompiluje. Musiałbyś dać (2, 3). Wówczas dostałbyś ostatnią liczbę z nawiasu, czyli 3.
W linijce

a = 1 ? 2+3 : 4+5;

Warunkiem jest liczba 1 (pogrubiona w kodzie).
Wartość a nie ma znaczenia. Do tej zmiennej przypisujesz wynik wyrażenia

1 ? 2+3 : 4+5

 

komentarz 27 sierpnia 2019 przez tangarr Mędrzec (154,860 p.)

Ciekawa sprawa. Linia:

int a = 1 ? 1, 2 : 3, 4;

mi się nie kompiluje w gcc 7.4. (error: expected unqualified-id before numeric constant).

Wystarczy mała poprawka:

int a = 1 ? 1, 2 : (3, 4);

żeby kod się kompilował.

Podobne pytania

0 głosów
4 odpowiedzi 2,912 wizyt
pytanie zadane 17 sierpnia 2017 w C i C++ przez Stronk Użytkownik (660 p.)
0 głosów
2 odpowiedzi 1,073 wizyt
pytanie zadane 8 kwietnia 2017 w C i C++ przez WireNess Stary wyjadacz (11,240 p.)
0 głosów
1 odpowiedź 1,257 wizyt
pytanie zadane 14 maja 2017 w SQL, bazy danych przez Bartlomiej Bywalec (2,480 p.)

92,568 zapytań

141,422 odpowiedzi

319,637 komentarzy

61,957 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!

...