2010-07-27 17 views
8

kiedyś widział -wired- operatora C++, która przypisuje wartości, jeżeli większa niż ..
było połączenie ?, < i =C++ Operator warunkowy

np Niech X = wartość, jeśli wartość jest większa niż x

I nie znaczyx=(x<value)x:value

To był jakiś x<?=value

Ale nie pamiętam go dokładnie, i nie można go znaleźć w Internecie. .. Czy ktoś może mi o tym przypomnieć?

Dzięki,

+2

Jak o 'if (wartość> x) x = value;'? – GManNickG

+0

@GMan: Wiem ... ale naprawdę ciekawi mnie to ... – Betamoo

+0

http://stackoverflow.com/questions/5199630/what-does-the-operator-mean –

Odpowiedz

8

gcc ma - przynajmniej w wersji 3.3.6! - rozszerzenie języka specyficzne dla gcc, zapewniające wyspecjalizowanym operatorom wdrażanie min. i maks. Być może właśnie o tym myślisz?

Minimum and Maximum Operators in C++

nie mam gcc przydatny do testowania go, ale może mieć formę aktualizacji, zbyt.

+0

Tak ... to jest tak blisko tego, co ja mean .... – Betamoo

+2

Warto zauważyć, że są one przestarzałe: "Operatory minimum i maksimum G ++ (' ? ") i ich złożone formularze (' ? = ') zostały wycofane i zostaną usunięte w przyszłej wersji Kod korzystający z tych operatorów powinien zostać zmodyfikowany, aby zamiast tego używać std :: min i std :: max. " - http://gcc.gnu.org/onlinedocs/gcc-4.0.1/gcc/Deprecated-Features.html –

+0

@Magnus Hoff: Połóż to jako odpowiedź, a ja wybiorę twoje ... – Betamoo

1

Czy myślisz o ternary operator?

result = a > b ? x : y; 
+0

Tak, on to robi. Poza tym, że nie jest nazywany operatorem trenarnym (każdy operator z trzema operandami to trenary), ale operator warunkowy. – delnan

+1

Ponieważ w C & C++ jest tylko jeden potrójny operator (na razie?), Myślę, że dla wszystkich będzie jasne, o czym mówisz ... –

+0

Nie, nie to ..! – Betamoo

11

Nie ma operatora, który przydzieliłby zmienne w oparciu o ich wartości względne.

Jednak nie jest: operator:

x = value > x ? value : x; 

Jeśli czytasz to głośno od lewej do prawej strony, ma to sens.

+0

Ciekawe, że zostało to odrzucone z jakiegoś powodu ... –

0
x = x < value ? 0 : 1; 

Ta funkcja ustawiająca wartość x na 0 to x < wartość, 1 w przeciwnym razie.

+0

w rzeczywistości, w tym przypadku możesz zrobić "x = x> = wartość", aby to osiągnąć, prawdziwe evaluty do 1. – KillianDS

0

jest to wygodniejsze wersja instrukcji if, która jest używana do przypisania

int x = (some bool) ? trueval : falseval; 

jest grubsza, co to znaczy, gdy bool ocenia ją albo dostaje trueval lub falseval zależności od wyniku, to łatwiej niż mówi

int x; 
if (someval) 
    x = trueval; 
else 
    x = falseval; 
0

podejrzewam, co myślisz o to gcc extension który pozwala opuścić środkowy argument dla operatora warunkowego, więc (na przykład):

a = b ? b : c; 

można zapisać jako:

a = b ?: c; 

Pomimo '2.95.3' w adresie URL, nie jestem świadomy nowszej wersji połączonej strony. Jeśli ktoś jest, możesz go wskazać (lub edytować).

+1

Ten operator jest tym, o czym czasem chciałem || pracował. Podczas gdy czasami warto mieć "prawdziwą" wartość wymuszoną na "1", są jeszcze inne czasy, kiedy bardziej użyteczne byłoby posiadanie wartości pierwszego niezerowego argumentu. – supercat

4

Jak to:

(x<value) || (x=value) 
+0

hah, miło :) +1 – jalf

+1

Ktoś lubi używać Perla :-) –

+0

* dreszcz * Mam nadzieję, że nigdy go nie zobaczę w prawdziwym kodzie. – nmichaels