1

我对ternary operator主要的 in有点疑惑,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())

希望其中一些有意义,这是我直到现在还没有理解的东西。

4

2 回答 2

5

您可以为此使用 max 函数:

float clamped = max(1.f - x + my_function(), .2f);
于 2014-01-23T11:16:27.583 回答
0

怎么样

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

?

或更笼统地说

type tmp;
type result = condition(tmp = expr) ? special_val : tmp;
于 2014-01-23T12:44:03.130 回答