Jim*_*ack 1 c++ arduino conditional-operator
我不是专家,但我确实喜欢学习和理解。考虑到这一点,我在 Arduino IDE 中编写了以下内容:
lockout[idx] ? bulb[idx].off() : bulb[idx].on();
Run Code Online (Sandbox Code Playgroud)
替换这个:
if (lockout[idx]) bulb[idx].off(); else bulb[idx].on();
Run Code Online (Sandbox Code Playgroud)
lockout[]是 的数组bool,并且bulb[]是类的数组,其中 。off和.on方法。
我四处寻找示例,但从未见过?三元运算符的这种用法。我读过的内容似乎表明这不应该起作用。
但它确实可以编译。那么这实际上是合法的 C++ 吗?
如果它可以编译,那么它可能是格式良好的代码。如果三元运算符由于其类型而无法与这些操作数一起使用,则编译器将发出错误消息。事实上,没有这样的错误消息表明您的代码不存在这样的问题。
但是,在某些情况下,使用三元运算符可能会导致意外复制。
如果 和on方法off都返回void(或者说,bool),则不会出现任何复制问题,并且代码将按预期工作:如果lockout[idx]为真,则将bulb[idx].off()被评估,否则bulb[idx].on()将被评估。只会评估两种选择中的一种,就像该if语句所发生的情况一样。
通常,当您需要结果为表达式时,使用三元运算符。否则,使用语句编写代码if通常更具可读性。