2010-07-27 3 views
8

I vu une fois un opérateur -wired- en C++ qui attribue une valeur si elle est supérieure ..
était une combinaison de ?, < et =C++ opérateur conditionnel

par exemple soit x = valeur si la valeur est supérieure à x

Je ne veux pas direx=(x<value)x:value

Ce fut une sorte de x<?=value

Mais je ne me souviens pas exactement, et ne peut pas trouver en ligne. .. Quelqu'un peut-il me le rappeler?

Merci,

+2

Que diriez-vous si '(valeur> x) x = valeur;'? – GManNickG

+0

@GMan: Je sais ... mais je vraiment curieux de le rappeler ... – Betamoo

+0

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

Répondre

8

gcc a - dans la version 3.3.6 au moins! - une extension de langage spécifique à gcc fournissant des opérateurs spécialisés pour l'implémentation de min et max. Peut-être que c'est ce que vous pensez?

Minimum and Maximum Operators in C++

Je n'ai pas à portée de main gcc pour le tester avec, mais il pourrait avoir une forme de mise à jour, aussi.

+0

Oui ... qui est si proche de ce que je dire .... – Betamoo

+2

Il est intéressant de noter que ceux-ci sont déconseillés: ('') « Le minimum de G et les opérateurs maximum et leurs formes composées (' = '?) ont été désapprouvée et sera supprimée dans une version ultérieure Le code utilisant ces opérateurs devrait être modifié pour utiliser std :: min et std :: max à la place. " - http://gcc.gnu.org/onlinedocs/gcc-4.0.1/gcc/Deprecated-Features.html –

+0

@Magnus Hoff: Mettez ça comme une réponse et je vais choisir la vôtre ... – Betamoo

1

penser Êtes-vous du ternary operator?

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

Oui, il le fait. Sauf qu'il n'est pas appelé opérateur trenary (tout opérateur avec trois opérandes est trenary) mais opérateur conditionnel. – delnan

+1

Comme il n'y a qu'un seul opérateur ternaire dans C & C++ (pour l'instant?) Je pense que ce sera assez clair pour tout le monde ce que vous parlez ... –

+0

Non, pas ça ..! – Betamoo

11

Aucun opérateur n'attribue de variables en fonction de leurs valeurs relatives.

Cependant, il y a l'opérateur?::

x = value > x ? value : x; 

Si vous lisez à haute voix de gauche à droite, il est logique.

+0

curieux que cela a été downvoted pour une raison quelconque ... –

0
x = x < value ? 0 : 1; 

Cette fonction définit x à 0 est la valeur x <, 1 sinon.

+0

En fait, dans ce cas, vous pouvez le faire 'x = x> = value' pour cela, vrai sévalue à 1. – KillianDS

0

c'est une version plus pratique d'une instruction if qui est utilisé pour l'attribution

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

c'est à peu près ce que cela signifie, lorsque la cuve est évalué qu'il soit obtient le trueval ou falseval en fonction du résultat, il est plus facile que de dire

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

Je soupçonne ce que vous pensez est un gcc extension qui vous permet de laisser le milieu opérande à l'opérateur conditionnel, donc (par exemple):

a = b ? b : c; 

peut être écrit comme:

a = b ?: c; 

Malgré la '2.95.3' dans l'URL, je ne suis pas au courant d'une version plus récente de la page liée. Si quelqu'un l'est, n'hésitez pas à le signaler (ou à l'éditer).

+1

Cet opérateur est ce que j'ai parfois souhaité || travaillé. Bien qu'il soit parfois utile d'avoir la valeur "vrai" forcée à "1", il y a d'autres fois où il serait plus utile d'avoir la valeur du premier opérande non nul. – supercat

4

Comment est-ce:

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

hah, nice :) +1 – jalf

+1

Quelqu'un comme celui d'utiliser Perl :-) –

+0

* frisson * je l'espère ne jamais voir que dans le code réel. – nmichaels