2013-04-24 64 views
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 ? ... ; 

這是畸形嗎?

我不是用一個條件運算符嵌套多個關卡。

我打算使用的表達式非常簡潔和簡單,在我看來,值得使用的條件運算符。

P.S.我不是問A.我應該使用哪一種? B.哪個更好C.哪個更合適

P.S.我在問如何將if-else語句轉換爲三元條件運算符。

對這個問題給出的關於編碼標準等的任何建議都是非常不希望的。

+5

這主要是一個樣式問題(儘管在某些情況下,您也可能會發現語法也會遇到問題)。我會說第一個選擇通常更具可讀性。 – 2013-04-24 12:03:17

+2

'if(a)b else c;'是一個陳述。 '一個? b:c'是一個表達式。選擇一個合理的。 – 2013-04-24 12:05:28

+0

我不認爲這個炒作...它給我帶來了一個錯誤...... – 2013-04-24 12:05:45

回答

3

不要比較布爾值爲true和false。沒有意義,因爲它們已經是真的或假了!只要寫

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

你的第二個示例不編譯因爲你用{}。但這可能是

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

但它取決於什麼/*do a*/等等。

+0

好的一點,謝謝布爾人,但這只是爲了說明的目的,因爲我試圖做出一個有意義的例子。現在我會嘗試你的解決方案。 – Mushy 2013-04-24 12:11:30

1

使用逗號運算符將不同表達式串在一起是在語言的規則之內,但它使代碼更難以閱讀(因爲您必須發現逗號,這並不總是容易的,特別是如果表達式不是'噸真的很簡單。

的另一個因素是當然,你只能爲if (x) ... else if(y) ...型條件句國家做到這一點的。

有時候,人們似乎更喜歡「短代碼」,從「可讀的代碼」,這是如果你參加「誰可以用最少的線條寫這篇文章」的比賽,那麼這個課程非常棒,但對於其他任何內容,尤其是那些「同步展示」或與同事分享也需要聯合的代碼明確它 - 一旦軟件項目變得足夠大,通常很難理解代碼如何工作,而不使模糊難以閱讀的混淆。我沒有真正看到使用第二個例子描述的方式使用條件語句的好處。這個例子有可能是不好的,但通常我會說「不要那麼做」。

+0

我應該注意到我使用的表達方式非常簡潔而且非常簡單。 – Mushy 2013-04-24 12:15:48

+1

顯示實際代碼的真實示例(在您的問題中,因爲代碼註釋在SO上是垃圾)。 – 2013-04-24 12:17:27

0

當然,它的工作原理(使用C++ 11)。我沒有嘗試過的解決方案,但以下Herb Sutters way您可以使用醚函數調用或立即執行拉姆達:

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

我還沒有嘗試編譯它,但在這裏你有一個結果whih要麼被計算lambda或一個正常的函數。