0

次のことを実行したいと思います。

if(x == true)
{
    // do this on behalf of x
    // do this on behalf of x
    // do this on behalf of x
}

条件演算子を使用していますが、これは正しいですか?

x == true ? { /*do a*/, /*do b*/, /*do c*/ } : y == true ? ... ;

これは不正な形式ですか?

条件演算子で複数のレベルをネストしていません。

私が使用しようとしている式は非常に簡潔で単純なので、条件演算子を使用する価値があると思います。

PS私はAを求めていません。どちらを使用すればよいですか? B. どちらが良い C. どちらがより適切か

PS if-else ステートメントを三項条件演算子に変換する方法を尋ねています。

コーディング標準などに関するこの質問に対するアドバイスは、まったく望ましくありません。

4

3 に答える 3

3

ブール値を true と false で比較しないでください。それらはすでに真または偽であるため、意味がありません。書くだけ

if (x)
{
    // do this on behalf of x
    // do this on behalf of x
    // do this on behalf of x
}

{andを使用しているため、2 番目の例はコンパイルされません}。でもこれはもしかしたら

x ? ( /*do a*/, /*do b*/, /*do c*/ ) : y ? ... ;

しかし、それは何が何であるかによって異なり/*do a*/ます。

于 2013-04-24T12:05:45.143 に答える
1

コンマ演算子を使用して異なる式を一緒に並べることは言語の規則の範囲内ですが、コードが読みにくくなります (コンマを見つける必要があるため、特に式が本当に単純でない場合は必ずしも簡単ではありません.

if (x) ... else if(y) ...もう1つの要因は、もちろん、型条件付き状態に対してのみこれを行うことができるということです。

時々、人々は「読みやすいコード」よりも「短いコード」を好むように見えますが、これはもちろん「誰がこれを最も少ない行で書けるか」という競争に参加している場合には素晴らしいことですが、それ以外のすべて、特に「ソフトウェアプロジェクトが十分に大きくなると、通常、コードを読みにくくする難読化なしでは、コードがどのように機能するかを理解するのが難しくなります。2番目の例で説明した方法で条件ステートメントを使用しても、実際には何のメリットもありません。例が悪い可能性もありますが、一般的には「そうしないでください」と言います。

于 2013-04-24T12:14:59.700 に答える
0

もちろん動作します (C++11 で)。私は解決策を試していませんが、Herb Sutters の方法に従って、関数呼び出しまたはすぐに実行されるラムダを使用できます。

cond ? 
  [&]{
    int i = some_default_value;
    if(someConditionIstrue)
    {
        Do some operations ancalculate the value of i;
        i = some calculated value;
    }
    return i;
} ()  
  : 
somefun() ;

私はそれをコンパイルしようとはしませんでしたが、ラムダまたは通常の関数で計算された結果がここにあります。

于 2013-04-24T12:22:41.007 に答える