2013-12-20 124 views
0

我很好奇C++如何處理這個嵌套條件運算符。我敢肯定,我明白這是如何工作的,但我很好奇,任何人都可以通過圖解釋如何循環將執行嵌套的條件運算符C++嵌套條件運算符循環

例如,循環會通過每個實例的每個條件運算符的第一個表達式執行嗎?

同樣是這個嵌套條件算子構成爲:

(ⅰ< 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

有疑問時,拼寫出來...

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之後,然後只需打開{,直到我們看到:

6

看來您在問如何像x ? y ? 1 : 2 : 3這樣的表達式被解析。

如果你考慮一下,那實際上只有一種可能。即,距離最右邊的:必須綁定到最左邊的?。因此,表達分析爲:

x ? (y ? 1 : 2) : 3

所以,如果xytrue,則返回1;如果x但不是ytrue,則返回2;如果xfalse,則返回3

對不起,不直接回答你的問題,但我覺得這樣會更容易。

1

運算符在您編寫時不是結構化的。也許這是用括號更清晰:

cout << ((i < 2) ? (!i ? x [i] : y) : x[1]); 
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); 

如同的C++源碼許多文體方面,選擇一個很好的佈局是一個比特的技術的 - 但是實驗是一個很好的方式來獲得它的感覺。