c ++嵌套条件运算符循环

时间:2013-12-20 22:11:52

标签: c++ loops nested conditional operator-keyword

我很好奇c ++如何处理这个嵌套的条件运算符。我很确定我理解它是如何工作的,但我很好奇,任何人都可以通过图解释循环如何执行嵌套条件运算符

例如,循环是否会为每个实例执行每个条件运算符的第一个表达式?

此嵌套条件运算符的结构也是:

(i< 2)? x [i]:y;

!我? y:x [1];

我想我对此的本质非常好奇。除非你能够给我一个关于循环如何执行这个条件运算符的充分解释,否则请不要回答。

#include "stdafx.h"
#include <iostream>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])

{
const char x[2] [20] = {" Cloud "," at your service\n"}; 
const char * y = "Strife"; 
for (int i = 0; i < 7; i++) 
    cout << (( i < 2)? !i ? x [i] : y : x[1]);

cout << endl << endl << x[0] << endl << x[1] << endl;

cin.get();
cin.get();
return 0;
}

4 个答案:

答案 0 :(得分:6)

您似乎在询问如何解析像x ? y ? 1 : 2 : 3这样的表达式。

如果你考虑一下,实际上只有一种可能性。也就是说,最右边的: 必须绑定到左边最远的?。因此表达式解析为:

x ? (y ? 1 : 2) : 3

因此,如果xytrue,则会返回1;如果xy不是true,则返回2;如果xfalse,则会返回3

很抱歉不能直接回答您的问题,但我觉得按照这种方式会更容易。

答案 1 :(得分:4)

如果有疑问,拼出来......

for (int i = 0; i < 7; i++)
{
    if (i < 2) {
        if (!i) { // technically, this is "if i == 1"
            cout << x[i];
        } else { // and this is "if i == 0"
            cout <<y;
        }
    } else {
        cout << x[1];
    }
}

简单地说明一下。 ?之前的所有内容都放在if中,然后只需打开{,直到我们看到:

答案 2 :(得分:1)

操作员在编写时没有结构化。也许用圆括号更清楚:

cout << ((i < 2) ? (!i ? x [i] : y) : x[1]);

答案 3 :(得分:1)

已经对条件意味着什么进行了一些很好的分析。只是想提出一些建议:

  • 考虑编写或重新排序此类表达式,以便?:交替,
  • 考虑将它们分成多行,并使用缩进反映其处理过程。

其中任何一个或两个都应该更容易跟踪他们的行为。

考虑:

i < 2 ? !i ? x[i] : y : x[1]   # somewhat confusing...

只是缩进以显示处理优先级:

i < 2      // if               just put ? and : beneath related condition
? !i       // then if
  ? x[i]   //      then
  : y      //      else
: x[1]     // else

或者为了简化同时保持单行简洁,请尝试:

i >= 2 ? x[1] : !i ? x[i] : y   # equivalent but simpler to "grok" (see below)

指定为候补?:的表达式就像一个简单的if / else if / else if / else链一样,所以你可以在您完成工作的过程中稳步处理并消除可能性。

if (i >= 2)
    (value is) x[1]
else if (!i)
    x[i]
else
    y;

我有时也会在线间写交替条件:

std::cout << (i >= 2 ? x[1] :    // "if condition1 then value1 else
              !i ? x[i] :        //  if condition2 then value2 else
              y);                //  value3"

...或者有时(取决于线条长度和视觉复杂性)进入整个猪群并排列: ?下面的std::cout << (i >= 2 ? x[1] : !i ? x[i] : y); ...

{{1}}

与C ++源代码的许多风格方面一样,选择一个漂亮的布局是一种艺术 - 但实验是一种很好的方式来感受它。

相关问题