我一直想知道如何用 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 将被返回或计算。
请记住,只有当表达式分别为 true 或 false 时,才会计算和执行 trueValue 和 falseValue。这种行为称为短路。
在 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
似乎没有人提到条件运算符表达式的结果可以是 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 将被分配给它。 如果它是 false 那么 34 将被分配给它
你可以简单地写成
C=(A>B)?A:B;
这与:
相同
if(A>B)
C=A;
else
C=B;
这称为“三元运算符”,
?
和 :
是编写 if-else 语句的另一种方式。
查看此 Codepen 中的“示例 #1”,然后取消注释...您会注意到它的作用。
现在注释“示例#1”,取消注释“示例#2”,看看会发生什么。该代码执行完全相同的操作...但这次只有 5 行代码。请注意,出现在
?
符号之前的内容都是 if
(条件),而出现在 :
之后的内容都是要执行的内容。
但是,如果您有一个条件需要“else-if”(具有超过 2 个可能的结果),就像 Codepen 的“示例 #3”中的条件(这增加了用户编写特定错误答案的可能性)怎么办?那么三元运算符可能没那么有用,但是您当然可以使用三元运算符连接多个条件,就像这个 ES6 fizzbuzz 示例一样。
这就是我们的条件 -> A?B:C 因此,根据条件,如果“A”为 True,则打印“B”,如果“A”为 false,则打印“C”。 换句话说,我们也可以说它是 if else 条件的另一种方式。
或者以与口头对应的方式相同的方式读出它:
if-?-then-:-else