2008-12-25 123 views
18

我一直想知道如何寫在C++語言兼容的"A ? B : C"語法。如何使用條件運算符?

我覺得它的工作原理是這樣的:(僞代碼)

If A > B 
    C = A 
Else 
    C = B 

將任何老將C++程序員,請幫我嗎?

回答

42

它的工作原理是這樣的:

(condition) ? true-clause : false-clause 

它賦值操作最常用的,但它有其他用途。三元運算符?是縮短if-else子句的一種方法,在其他語言中也稱爲直接if語句(例如,VB中的IIf(condition,true-clause,false-clause))。

例如:

bool Three = SOME_VALUE; 
int x = Three ? 3 : 0; 

相同

bool Three = SOME_VALUE; 
int x; 
if (Three) 
    x = 3; 
else 
    x = 0; 
+1

此外,如果x是在你的例子用const int,三元版本將是編譯的唯一選擇。 – 2008-12-25 21:48:35

+0

初始化三是不是更好? – 2008-12-26 07:41:40

2

我假設你的意思的東西像A = B? c:d,其中b是條件,c是b爲真時的值,d是b爲假時的值。

4

在C++中,如果有這部分沒有實際的。它被稱爲三元運算符。它的用法如下:<布爾語句>? <結果爲真>:<結果如果爲假>;對於你上面的例子就應該是這樣的:

C = A > B ? A : B; 

這篇文章在維基百科上還討論了它: http://en.wikipedia.org/wiki/Ternary_operation

7

它的工作原理是這樣的:

expression ? trueValue : falseValue 

這基本上意味着,如果expression求值爲true,則trueValue將被返回或執行,否則將返回falsevalue或進行評估。

記住trueValue和falseValue將僅被評估並執行如果表達式分別是真還是假。這種行爲稱爲短路。

1

我想說的?是一個捷徑。然而,一些「硬核」程序員傾向於說長遠來說,所以在未來的情況下,人們可以輕鬆讀取和修改代碼。

例如,如果你寫

int a = b<c ? b : c; 

一些人聲稱這是更清晰的寫:

if(b<c) 
a = b; 
else 
a = c; 

因爲在今後的案件中,人們可以抓住它。當然,一個簡單的b < c? b:c很容易被捕獲,但有時候會有複雜的操作,很難發現。

1

似乎沒有人提到條件運算符表達式的結果可以是C++中的L值(但不是C)。下面的代碼編譯的C++和運行良好:

int a, b; 
    bool cond; 
    a=1; b=2; cond=true; 
    (cond? a : b) = 3; 
    cout << a << "," << b << endl; 

上述程序打印3,2

然而,如果a和b是不同類型的,它不會工作。下面的代碼給出了一個編譯器錯誤:

int a; 
    double b; 
    bool cond; 
    a=1; b=2; cond=true; 
    (cond? a : b) = 3; 
    cout << a << "," << b << endl; 
0

是很簡單的 它的基本語法是: 表達式表達式2:表達式3;

如果表達式1成立,則表達式2將成立,否則成立表達式3成立。

例如:

hey=24>2?24:34;

這裏作爲條件是24位真值將被分配給它。 如果是假,則34將被分配給它

0

simply you can write this as

C =(A> B)A:B;

THIS IS SAME AS:

if(A>B) 

C=A; 

else 

C=B;