【发布时间】:2010-09-28 10:06:01
【问题描述】:
我一直想知道如何用 C++ 兼容的语言编写 "A ? B : C" 语法。
我认为它的工作原理类似于:(伪代码)
If A > B
C = A
Else
C = B
有没有资深的 C++ 程序员可以帮帮我吗?
【问题讨论】:
我一直想知道如何用 C++ 兼容的语言编写 "A ? B : C" 语法。
我认为它的工作原理类似于:(伪代码)
If A > B
C = A
Else
C = B
有没有资深的 C++ 程序员可以帮帮我吗?
【问题讨论】:
它是这样工作的:
(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;
【讨论】:
它是这样工作的:
expression ? trueValue : falseValue
这基本上意味着如果expression评估为true,则将返回或执行trueValue,否则将返回或评估falseValue。
请记住,trueValue 和 falseValue 仅在表达式分别为 true 或 false 时才会被计算和执行。这种行为称为短路。
【讨论】:
在 c++ 中没有实际的 if 部分。它被称为三元运算符。它是这样使用的:
C = A > B ? A : B;
维基百科上的这篇文章也讨论了它: http://en.wikipedia.org/wiki/Ternary_operation
【讨论】:
我假设您的意思是 a = b 之类的东西? c : d,其中b为条件,c为b为真时的值,d为b为假时的值。
【讨论】:
我会说 ?是一个捷径。然而,一些“铁杆”程序员倾向于说把它写出来,以便在未来的情况下,人们可以轻松地阅读和修改代码。
例如,如果你写
int a = b<c ? b : c;
有人声称这样写更清楚:
if(b<c)
a = b;
else
a = c;
因为在未来的情况下,人们可以抓住它。当然,一个简单的 b
【讨论】:
a = ifelse(b<c, b, c)。在 PHP 中,它将是 $a = ($b<$c) ? b : c;。对于简单的情况,例如单行语句,我更喜欢三元运算符。对于多行语句,我会使用传统的方式来获得更清晰的逻辑结构。
似乎没有人提到条件运算符表达式的结果可以是 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;
【讨论】:
这很简单 它的基本语法是: 表达式1?表达式2:表达式3;
如果表达式 1 为真,则表达式 2 将成立,否则表达式 3 将成立。
示例:
hey=24>2?24:34;
这里条件为真值 24 将分配给它。 如果它是假的,那么 34 将被分配给它
【讨论】:
你可以这么写
C=(A>B)?A:B;
这是一样的:
if(A>B)
C=A;
else
C=B;
【讨论】:
这称为“三元运算符”,? 和 : 是另一种编写 if-else 语句的方式。
查看Codepen 中的“示例 #1”,然后取消注释...您会注意到它的作用。
现在评论“Example #1”,取消评论“Example #2”,看看会发生什么。代码做了完全相同的事情……但这次只有 5 行代码。请注意? 符号之前出现的内容是if(条件),: 之后出现的内容是要执行的内容。
但是,如果您有一个条件,需要像 Codepen 的“示例 #3”(这增加了用户写出特定错误答案的可能性)中的“else-if”(具有超过 2 种可能的结果),该怎么办? )?那么三元运算符可能就没那么有用了,但您当然可以将多个条件与三元运算符连接起来,就像在这个 ES6 fizzbuzz 示例中一样。
【讨论】:
这就是我们的条件 -> A?B:C 因此,根据条件,如果“A”为真,则打印“B”,如果“A”为假,则打印“C”。 换句话说,我们也可以说它是 if else 条件的另一种方式。
【讨论】: