36

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

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つの違いは何ですか?

4

5 に答える 5

50

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

 return a

声明です

于 2010-10-12T19:20:16.213 に答える
41

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

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

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

return a >=0 ? a : -a;
于 2010-10-12T20:35:19.840 に答える
24

2つの違いは何ですか?

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

于 2010-10-12T20:22:33.287 に答える
11

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

別のブランチで返品したい場合は、if代わりに次を使用します。

if (a >=0)
   return a;
else
   return -a;
于 2010-10-12T19:23:31.223 に答える
9

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

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

于 2010-10-12T19:20:00.087 に答える