在C++中等价于Lua的 "and/or" 是什么?

3
在Lua中,您可以这样做:
foo = a and b or c and d or e

这相当于(我至少相信它是相等的):

local foo = nil
if a then
foo = b
elseif c then
foo = d
else
foo = e
end

在C++中有类似或等效的东西吗?
5个回答

6
我想这就是你想要的内容:

我猜这就是你想要的:

foo = a ? b : (c ? d : e );

5

这里有一个三元运算符。它的优先级比较特别,因此最好总是加上括号。

bool foo = ( a ? b : ( c ? d : e ) )

请注意,只有当bde可以归约为相同类型时,此方法才有效。如果a是一个双精度浮点数,d是一个单精度浮点数,而e是一个整数,则结果将始终转换为双精度浮点数。

?: 运算符的优先级有什么好笑的?它比任何非赋值运算符的优先级都低,比所有赋值运算符的优先级都高,就是这样。因此,您可以轻松省略外部括号。更有趣的是它的结合性,这就是为什么您需要在嵌套的 ?: 之间使用括号的原因。 - leftaroundabout
@leftaroundabout,它没有我期望的优先级。示例:http://stackoverflow.com/q/10007140/382471 - robert
优先级非常合理:编写类似foo=c=='x'?x:yfoo=a||b?x:y这样的内容是有意义的,因此它必须比逻辑和比较运算符具有更低的优先级。此外,我需要收回我关于结合性的说法:它只是右结合的,所以你也可以省略内部括号。虽然你应该将表达式分成三行,并适当缩进,否则它会变得难以阅读。 - leftaroundabout

2
您可以使用三目运算符?:
foo = a ? b : c ? d : e;

虽然在这里添加括号并不是必要的,但我仍然会这样做以提高清晰度——上面的代码只使用了一堆单字母变量名就可以读懂,但任何比给出的示例更复杂的内容都很快会变得难以管理。 - Spudley

1

不完全是这样。Lua之所以能够做到这一点,主要是因为它采用了动态类型-在C++中你几乎无法实现这一点。最接近的方法是使用三元运算符,但它有严格的限制。


2
有哪些限制?所有其他答案都指向三元操作符。 - pighead10

-3

CC++中使用&&表示然后,使用||表示否则

使用三元运算符?:表示条件表达式


-1 这个问题是关于C++的,没有必要使用“&&”代替“and”。 - Johannes Schaub - litb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接