三元运算符默认值

时间:2014-01-23 11:13:43

标签: c++ ternary-operator clamp

我想知道ternary operator主要在C++,但我认为它也可能适用于其他语言。

我遇到的问题的最好例子,(或者我应该把它称为问题?我猜是一个概念问题。),钳制值

float clamped = (x<0.3) : 0.3 ? x;

我发现自己想要编写这段代码,但x可能很复杂,说我们有这样的代码:

float clamped = (1.f - x + my_function()) > .2f ? .2f : (1.f - x + my_function());

这是我认为失控的地方,我会改写它:

float clamped = (1.f - x + my_function());
if (clamped > .2f)
    clamped = .2f;

所以这实际上导致了两个问题

1:是否有违约行为,所以我可以说“做这个,如果是真的,否则只是做它说的话”,伪代码如下:float clamped = (1.f - x + my_function()) > .2f : .2f ? **default**;

2:如果我仍然是第一种方式,它会首先评估条件,如果是false,还是进行另一次评估以获得(1.f - x + my_function())的值吗?

希望其中一些有道理,这是我迄今尚未理解的事情。

2 个答案:

答案 0 :(得分:5)

您可以使用max函数:

float clamped = max(1.f - x + my_function(), .2f);

答案 1 :(得分:0)

怎么样

float v;
float processed = (v = expr) > 0.f ? special_val : v;

或者更一般地说

type tmp;
type result = condition(tmp = expr) ? special_val : tmp;