web-dev-qa-db-ja.com

三項演算子c ++のreturnステートメント

以下のように三項演算子を使用して絶対関数を記述しました

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

次のエラーメッセージが表示される

../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

このように書けば

return a>=0 ? a : -a;

エラーは出ません。 2つの違いは何ですか?

32
ameen

三項演算子の2番目と3番目の引数は、ステートメントではなく式です。

 return a

ステートメントです

41

構文が正しくありません。そのはず

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

またはあなたがそれを望んだ方法:

return a >=0 ? a : -a;
33
Nandit Tiku

2つの違いは何ですか?

1つは正しい構文で、もう1つは正しくありません。

23
Gary Willoughby

?:は、3つの式を受け取り、何らかの方法でそれらを評価して結果を生成する演算子です。 return aではない(それはステートメントなので)最初のフォームは機能しません。他の演算子の引数にreturnを入れられないのと同じです:return a + return bも機能しません。

別のブランチでリターンが必要な場合は、代わりにifを使用します。

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

Returnはステートメントであり、値が期待される場所では使用できません。

三項演算子の3つのコンポーネントでは、式(通常は値を生成する)を使用する必要があります。

7