int qempty()
{
return (f == r ? 1 : 0);
}
In dem obigen Snippet, was bedeutet "?"? Wo können wir es ersetzen?Was bedeutet "?" in C++ machen?
int qempty()
{
return (f == r ? 1 : 0);
}
In dem obigen Snippet, was bedeutet "?"? Wo können wir es ersetzen?Was bedeutet "?" in C++ machen?
Dies wird gemeinhin als die conditional operator, und wenn so benutzt:
condition ? result_if_true : result_if_false
... wenn die condition
zu true
auswertet, der Ausdruck result_if_true
auswertet, ansonsten wertet es result_if_false
.
Es ist syntactic sugar, und in diesem Fall kann es mit
int qempty()
{
if(f == r)
{
return 1;
}
else
{
return 0;
}
}
Hinweis ersetzt: Einige Leute zu ?:
es als „der ternäre Operator“ beziehen sich, weil es der einzige ternäre ist Operator (dh Operator, der drei Argumente annimmt) in der Sprache, die sie verwenden.
Ich denke, sie bedeuten implizit "der (C++) ternäre Operator". Welche anderen ternären Operatoren gibt es in C++? – sblom
Das ist das einzige in C++ – Colin
Für jeden, der bedingte Liebe braucht: http://www.artima.com/cppsource/foreach.html. Eric Niebler erklärt, wie sein boost.foreach den bedingten Operator verwendet. –
Es ist der bedingte Operator.
a? b: c
Es ist eine Abkürzung für IF/THEN/ELSE.
bedeutet: wenn a wahr ist, return b, sonst zurück c. In diesem Fall, wenn f == r, return 1, sonst Rückkehr 0.
Dies ist ein ternärer Operator, es ist im Grunde ein Inline-if-Anweisung
x ? y : z
Werke wie
if(x) y else z
außer , anstelle von Aussagen haben Sie Ausdrücke; Sie können es also in der Mitte einer komplexeren Anweisung verwenden.
Es ist nützlich, um prägnanten Code zu schreiben, aber kann überstrapaziert werden, um schwer zu wartenden Code zu erstellen.
Sie müssen hier vorsichtig sein; Es funktioniert nicht genau wie eine if-Anweisung. Während du * etwas sagen kannst wie int 'a = x? y: z; 'du * kannst * nicht sagen' int a = wenn (x) y else z; ' –
es sich lohnt zu wissen, dass es einen Sequenzpunkt am '?' gibt. Das bedeutet, dass Folgendes gilt: ++ x? x: y; –
@Daniel, das meinte ich mit Ausdrücken und nicht mit Aussagen. Ich war wahrscheinlich nicht explizit genug über den Unterschied, also danke, dass ich etwas geklärt habe. – Richard
Es heißt conditional operator.
Sie können es mit ersetzen:
int qempty(){
if (f == r) return 1;
else return 0;
}
Das Fragezeichen ist der Bedingungsoperator. Der Code bedeutet, dass wenn f == dann r 1 zurückgegeben, ansonsten Rückgabe von 0. Der Code als
neu geschrieben werden kannint qempty()
{
if(f==r)
return 1;
else
return 0;
}
das ist wahrscheinlich nicht der sauberste Weg, es zu tun, aber hoffentlich hilft Ihr Verständnis.
können Sie einfach umschreiben als:
int qempty(){ return(f==r);}
was dasselbe tut wie in den anderen Antworten gesagt.
Dies würde implizite Konvertierung von Boolean zu Int – mmcrae
Nur eine Notiz, wenn Sie jemals sehen:
a = x ? : y;
Auf den Standard eine GNU-Erweiterung ist (siehe https://gcc.gnu.org/onlinedocs/gcc/Conditionals.html#Conditionals).
Es ist die gleiche wie
a = x ? x : y;
in CLang durchführen (mindestens die neuesten Versionen) diese Erweiterung ist ebenfalls verfügbar. Es ist sogar verfügbar, wenn C++ 11-Flag in einem qmake-Projekt deaktiviert ist. Also ein Ausdruck wie int 'x = 1 + 1? : 0 '; gibt korrekt '2' in meinem Compiler zurück und das hat nichts geklaert. –
In diesem speziellen Fall natürlich, man kann es nur ersetzen mit Rück f == r; – Eclipse
In Kommentaren wird es verwendet, um eine Frage zu stellen. –
@Eclipse: Ich würde mich nicht auf eine implizite Konvertierung bool-> int verlassen, wenn ich es vermeiden kann. –