2014-01-23 107 views
1

我想知道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())的值?

希望其中的一些是有道理的,這是我到現在還沒有得到理解的東西。

回答

5

您可以使用此最大功能:

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

而最大的問題是..爲什麼我還沒有做過這方面?謝謝你,這當然是真的。然而,有些情況下我可能想要類似地使用它,但有一個'type a =(blah):x?等等;'最小/最大'不能解決它,但真的很感激。 – qrikko

+3

+1(但與OP的實際代碼對應的函數將是'min')。 – Angew

+0

@qrikko重申你的通用例子:用'true'替換第二個'blah'。 (但這只是針對這個具體的例子。) –

0

如何

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

或者更一般

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