2008-12-25 48 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;