三元运算符默认值

qri*_*kko 1 c++ ternary-operator clamp

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

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

float clamped = (x<0.3) : 0.3 ? x;
Run Code Online (Sandbox Code Playgroud)

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

float clamped = (1.f - x + my_function()) > .2f ? .2f : (1.f - x + my_function());
Run Code Online (Sandbox Code Playgroud)

在我看来,这是失控的地方,我会重写它:

float clamped = (1.f - x + my_function());
if (clamped > .2f)
    clamped = .2f;
Run Code Online (Sandbox Code Playgroud)

所以这真的导致了两个问题

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

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

希望它有一些有意义,这是我迄今尚未理解的东西.

Sjo*_*erd 5

你可以使用max函数:

float clamped = max(1.f - x + my_function(), .2f);
Run Code Online (Sandbox Code Playgroud)

  • +1(但对应于OP的实际代码的函数将是"min"). (3认同)