web-dev-qa-db-ja.com

「?」とは何ですかC ++で実行しますか?

int qempty()
{
    return (f == r ? 1 : 0);
}

上記のスニペットでは、「はどういう意味ですか?何に置き換えることができますか?

64

これは一般的に conditional operator と呼ばれ、次のように使用される場合:

condition ? result_if_true : result_if_false

... conditiontrueに評価される場合、式はresult_if_trueに評価され、そうでない場合はresult_if_falseに評価されます。

構文糖 です。この場合、次のように置き換えることができます。

int qempty()
{ 
  if(f == r)
  {
      return 1;
  } 
  else 
  {
      return 0;
  }
}

注:一部の人々は?: itを「三項演算子」、使用している言語で唯一の三項演算子(3つの引数を取る演算子)であるため。

112

これは三項演算子であり、基本的にインラインifステートメントです。

x ? y : z

のように動作します

if(x) y else z

ただし、ステートメントの代わりに式があります。そのため、より複雑なステートメントの途中で使用できます。

簡潔なコードを書くのに便利ですが、保守しにくいコードを作成するために使いすぎる可能性があります。

14
Richard

条件演算子 と呼ばれます。

次のものに置き換えることができます。

int qempty(){ 
    if (f == r) return 1;
    else return 0;
}
5
jjnguy

それは条件演算子です。

? b:c

IF/THEN/ELSEのショートカットです。

意味:aがtrueの場合はbを返し、そうでない場合はcを返します。この場合、f == rであれば1を返し、そうでなければ0を返します。

3
Joe

これに気づいたら、注意してください:

a = x ? : y;

これはGNU標準の拡張機能です( https://gcc.gnu.org/onlinedocs/gcc/Conditionals.html#Conditionals を参照)。

と同じです

a = x ? x : y;
3
Nick Kossifidis

疑問符は条件演算子です。コードは、f == rの場合1が返されることを意味し、それ以外の場合は0を返します。コードは次のように書き換えることができます。

int qempty()
{
  if(f==r)
    return 1;
  else
    return 0;
}

これはおそらく最もクリーンな方法ではありませんが、うまくいけば理解に役立つでしょう。

2
ssakl