以下のように三項演算子を使用して絶対関数を記述しました
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つの違いは何ですか?
三項演算子の2番目と3番目の引数は、ステートメントではなく式です。
return a
ステートメントです
構文が正しくありません。そのはず
if (a >=0)
return a;
else
return -a;
またはあなたがそれを望んだ方法:
return a >=0 ? a : -a;
2つの違いは何ですか?
1つは正しい構文で、もう1つは正しくありません。
?:
は、3つの式を受け取り、何らかの方法でそれらを評価して結果を生成する演算子です。 return a
は式ではない(それはステートメントなので)最初のフォームは機能しません。他の演算子の引数にreturn
を入れられないのと同じです:return a + return b
も機能しません。
別のブランチでリターンが必要な場合は、代わりにif
を使用します。
if (a >=0)
return a;
else
return -a;
Returnはステートメントであり、値が期待される場所では使用できません。
三項演算子の3つのコンポーネントでは、式(通常は値を生成する)を使用する必要があります。