2010-10-12 11 views
27

schrieb ich die absolute Funktion ternären Operator alsreturn-Anweisung in ternäre Operator C++

int abs(int a) { 
a >=0 ? return a : return -a; 
} 

folgt erhalte ich folgende Fehlermeldungen

../src/templates.cpp: In function ‘int abs(int)’: 
../src/templates.cpp:4: error: expected primary-expression before ‘return’ 
../src/templates.cpp:4: error: expected ‘:’ before ‘return’ 
../src/templates.cpp:4: error: expected primary-expression before ‘return’ 
../src/templates.cpp:4: error: expected ‘;’ before ‘return’ 
../src/templates.cpp:4: error: expected primary-expression before ‘:’ token 
../src/templates.cpp:4: error: expected ‘;’ before ‘:’ token 
../src/templates.cpp:5: warning: no return statement in function returning non-void 

Wenn ich schreibe, wie diese

return a>=0 ? a : -a; 

Ich bekomme keinen Fehler. Was ist der Unterschied zwischen den beiden?

Antwort

37

Das zweite und dritte Argument des ternären Operators sind Ausdrücke, keine Anweisungen.

return a 

ist eine Aussage

+0

Das erste Argument des ternären Operator ist auch ein Ausdruck, natürlich. Die letzten beiden können jedoch Ausdrücke des Typs "void" sein. –

+0

Ja, es ist nur so, dass das OP-Problem mit den letzten zwei war ... –

5

Rückgabe ist eine Anweisung und kann nicht verwendet werden, wenn ein Wert erwartet wird.

Sie müssen Ausdrücke (die normalerweise einen Wert ergeben) in den drei Komponenten des ternären Operators verwenden.

6

?: ist ein Operator, der drei Ausdrücke nimmt und sie in irgendeiner Weise ein Ergebnis zu erzeugen. return a ist kein Ausdruck (es ist eine Anweisung), so dass Ihre erste Form nicht funktioniert. Es ist das gleiche wie Sie return in die Argumente anderer Operatoren nicht setzen können: return a + return b wird auch nicht funktionieren.

Wenn Sie die Rückkehr in den einzelnen Zweigen möchten, verwenden Sie if statt:

if (a >=0) 
    return a; 
else 
    return -a; 
22

Was ist der Unterschied zwischen den beiden?

Eine ist richtige Syntax, die andere nicht.

+11

+1 für die Angabe des Offensichtlichen: D – Vinzenz

23

Ihre Syntax ist falsch. Es sollte

if (a >=0) 
    return a; 
else 
    return -a; 

sein oder so, wie Sie sie wollten:

return a >=0 ? a : -a; 
Verwandte Themen