int qempty()
{
return (f == r ? 1 : 0);
}
Co w powyższym fragmencie oznacza „ ? ”? Czym możemy to zastąpić?
int qempty()
{
return (f == r ? 1 : 0);
}
Co w powyższym fragmencie oznacza „ ? ”? Czym możemy to zastąpić?
Odpowiedzi:
Jest to powszechnie określane jako operator warunkowy i używane w ten sposób:
condition ? result_if_true : result_if_false
... jeśli condition
szacuje się na true
, wyrażenie oblicza na result_if_true
, w przeciwnym razie zwraca result_if_false
.
To jest cukier syntaktyczny iw tym przypadku można go zastąpić
int qempty()
{
if(f == r)
{
return 1;
}
else
{
return 0;
}
}
Uwaga: Niektórzy ludzie nazywają ?:
go „ operatorem trójskładnikowym ”, ponieważ jest to jedyny operator trójskładnikowy (tj. Operator, który przyjmuje trzy argumenty) w języku, którego używają.
a? b : c
cukier syntaktyczny [&]() -> Type { if (a) return b; else return c; }()
.
To jest operator trójskładnikowy, w zasadzie jest to instrukcja wbudowana if
x ? y : z
działa jak
if(x) y else z
z wyjątkiem, zamiast instrukcji masz wyrażenia; więc możesz go użyć w środku bardziej złożonej instrukcji.
Jest to przydatne do pisania zwięzłego kodu, ale może być nadużywane do tworzenia trudnego do utrzymania kodu.
Możesz po prostu przepisać to jako:
int qempty(){ return(f==r);}
Który robi to samo, co powiedział w innych odpowiedziach.
Tylko uwaga, jeśli kiedykolwiek to zobaczysz:
a = x ? : y;
Jest to rozszerzenie standardu GNU (patrz https://gcc.gnu.org/onlinedocs/gcc/Conditionals.html#Conditionals ).
To jest to samo co
a = x ? x : y;
x = 1+1 ? : 0
; poprawnie zwraca 2
, w moim kompilatorze i to nic nie narzekało.
Nazywa się operatorem warunkowym .
Możesz go zastąpić:
int qempty(){
if (f == r) return 1;
else return 0;
}
Znak zapytania to operator warunkowy. Kod oznacza, że jeśli f == r to zwracane jest 1, w przeciwnym razie zwraca 0. Kod można przepisać jako
int qempty()
{
if(f==r)
return 1;
else
return 0;
}
co prawdopodobnie nie jest najczystszym sposobem, ale miejmy nadzieję, że pomaga w zrozumieniu.