我想简化以下表达式(block
是一个整数,0
或者1
):
if (block)
opts = opts & ~O_NONBLOCK;
else
opts = opts | O_NONBLOCK;
这就是我想出的:
opts = block ? opts & ~O_NONBLOCK : opts | O_NONBLOCK;
然而,我敢肯定,有一种非常聪明的方法可以做到这一点。
这个怎么样?
opts = (opts & ~O_NONBLOCK) | (!block * O_NONBLOCK);
不过,我确实更喜欢你的第一个选项的明确性,而不是这个有点神秘的解决方案。
你的第一个例子尽可能简单,当然更能解释发生了什么。
如果由于某种原因您迫切希望输入更少的字符,您可以使用赋值运算符,我想:
if (block)
opts &= ~O_NONBLOCK;
else
opts |= O_NONBLOCK;
如果可以避免的话,我当然不会走三元运算符路线。
在第一个版本中,您还可以使用运算符的复合赋值版本
if (block)
opts &= ~O_NONBLOCK;
else
opts |= O_NONBLOCK;
:)
虽然我通常更喜欢?:
operator 而不是if
尽可能和适当的。然而,在这种特定情况下,很难说什么看起来更优雅。