C++ 三值运算符默认值
我想知道一点关于三元运算符的情况,主要是在C++ 三值运算符默认值,c++,ternary-operator,clamp,C++,Ternary Operator,Clamp,我想知道一点关于三元运算符的情况,主要是在C++中,但我认为它也可能适用于其他语言 我遇到的问题的最好例子(或者我应该称之为问题?我想这是一个概念问题。)是夹紧值 float clamped = (x<0.3) : 0.3 ? x; 在我看来,这就是它失控的地方,我会重写它: float clamped = (1.f - x + my_function()); if (clamped > .2f) clamped = .2f; 这引出了两个问题 1:是否存在默认行为,这样
C++
中,但我认为它也可能适用于其他语言
我遇到的问题的最好例子(或者我应该称之为问题?我想这是一个概念问题。)是夹紧值
float clamped = (x<0.3) : 0.3 ? x;
在我看来,这就是它失控的地方,我会重写它:
float clamped = (1.f - x + my_function());
if (clamped > .2f)
clamped = .2f;
这引出了两个问题
1:是否存在默认行为,这样我就可以在类似于:float-clipped=(1.f-x+my_-function())>.2f:.2f的伪代码中说“如果为真,就这样做,否则就照它说的做”了**违约**代码>
2:如果我仍然使用第一种方法,它会首先计算条件吗?如果它是false
,则执行另一种计算以从(1.f-x+my_function())
中获取值
希望其中有一些是有意义的,这是我到目前为止还没有理解的东西。您可以使用max函数来实现:
float clamped = max(1.f - x + my_function(), .2f);
您可以使用max函数来执行以下操作:
float clamped = max(1.f - x + my_function(), .2f);
怎么样
float v;
float processed = (v = expr) > 0.f ? special_val : v;
?
或者更一般地说
type tmp;
type result = condition(tmp = expr) ? special_val : tmp;
怎么样
float v;
float processed = (v = expr) > 0.f ? special_val : v;
?
或者更一般地说
type tmp;
type result = condition(tmp = expr) ? special_val : tmp;
最大的问题是。。为什么我以前没有做过这种连接?谢谢你,这当然是真的。然而,在某些情况下,我可能希望类似地使用它,但是有一个typea=(废话):x?废话
wheremin/max
不能解决这个问题,但仍然非常感谢+1(但是与OP的实际代码相对应的函数是min
)@qrikko是您的通用示例:只需将第二个blah
替换为true
。(但这只是针对这个特定的例子。)@James这不是错误吗?但我认为他的意思是类似于typea=(条件(废话)):x?废话
最大的问题是。。为什么我以前没有做过这种连接?谢谢你,这当然是真的。然而,在某些情况下,我可能希望类似地使用它,但是有一个typea=(废话):x?废话
wheremin/max
不能解决这个问题,但仍然非常感谢+1(但是与OP的实际代码相对应的函数是min
)@qrikko是您的通用示例:只需将第二个blah
替换为true
。(但这只是针对这个特定的例子。)@James这不是错误吗?但我认为他的意思是类似于typea=(条件(废话)):x?废话