« Discussion:Langage C++/Opérateurs » : différence entre les versions

Le contenu de la page n’est pas pris en charge dans d’autres langues.
Une page de Wikiversité, la communauté pédagogique libre.
Contenu supprimé Contenu ajouté
syntaxe : "v = c==d ? a : b"
Ppignol (discussion | contributions)
Aucun résumé des modifications
Ligne 4 : Ligne 4 :
[[Utilisateur:Polarman|Polarman]]
[[Utilisateur:Polarman|Polarman]]


Oui, le groupement "? : ;" est ce que l'on appelle dans le jargon l'opérateur ternaire de comparaison. Où effectivement "t = (c==d) ? a : b;" signifie Si "c==d" alors "t=a" sinon "t=b".Ppignol 22 février 2011 à 13:23 (UTC)


----
----
Ligne 11 : Ligne 12 :
Completement stupide. Il y a un defaut d'optimisation a utiliser les formes suffixees alors que l'on n'attends pas de valeur de retour, etant donne qu'une variable temporaire est alors utilisee pour stocker la valeur courante avant d'incrementer.<br>
Completement stupide. Il y a un defaut d'optimisation a utiliser les formes suffixees alors que l'on n'attends pas de valeur de retour, etant donne qu'une variable temporaire est alors utilisee pour stocker la valeur courante avant d'incrementer.<br>
Arcanis<br>
Arcanis<br>
Je ne vois pas en quoi l'utilisation de l'opérateur ++ en post-fixé devrais poser un quelconque soucis d'optimisation. D'après ce que j'ai pu lire, il n'y à pas de spécification en ce qui concerne les effets des opérateurs d'incrémentations. Mais on peut deviner ceci, soit "a++;" => "return (a += 1);" => "return (a = a + 1);" et "++a" => "b = a; a++; return b;" donc en fait l'opérateur préfixé serais plus lent que l'opérateur postfixé suivant l'implémentation. Ppignol 22 février 2011 à 13:23 (UTC)



----
----

Version du 22 février 2011 à 13:23

Est-ce que "?" est un opérateur?

t = c==d ? a : b //si la condition "c==d" est vérifié alors "t=a" sinon "t=b"

Dans tout les cas, il serait bon de rajouter une note sur cette syntaxe, ou de mettre une lien sur cette page vers une explication.
Polarman

Oui, le groupement "? : ;" est ce que l'on appelle dans le jargon l'opérateur ternaire de comparaison. Où effectivement "t = (c==d) ? a : b;" signifie Si "c==d" alors "t=a" sinon "t=b".Ppignol 22 février 2011 à 13:23 (UTC)



"Il est donc recommandé en C++ de n'utiliser que la forme suffixée des opérateurs d'incrémentation/décrémentation et uniquement dans une expression dont on n'attend pas de résultat."
Completement stupide. Il y a un defaut d'optimisation a utiliser les formes suffixees alors que l'on n'attends pas de valeur de retour, etant donne qu'une variable temporaire est alors utilisee pour stocker la valeur courante avant d'incrementer.
Arcanis
Je ne vois pas en quoi l'utilisation de l'opérateur ++ en post-fixé devrais poser un quelconque soucis d'optimisation. D'après ce que j'ai pu lire, il n'y à pas de spécification en ce qui concerne les effets des opérateurs d'incrémentations. Mais on peut deviner ceci, soit "a++;" => "return (a += 1);" => "return (a = a + 1);" et "++a" => "b = a; a++; return b;" donc en fait l'opérateur préfixé serais plus lent que l'opérateur postfixé suivant l'implémentation. Ppignol 22 février 2011 à 13:23 (UTC)


Attention les opérateurs &, |, ^ ne sont pas des opérateurs logiques mais des opérateurs bits à bits. Les opérateurs logiques sont !, && et ||. Je ne suis pas d'accord sur le terme "Comparateur" que je ne trouve nul part dans la littérature.

PiFou




Il y a une erreur dans ce que vous appelez L'opérateur d'affectation inverseur "!=". En recopiant le code que vous donnez, en l'enrobant un peu pour donner ceci :

#include <iostream>

int main(int argc, char* argv[])
{
  bool x, y;
  x = true;
  y = true;
  x != y; //x = false (voir l'opérateur "!") 

  if (x==false)
   std::cout << "x is false\n";
  else
   std::cout << "x is true\n";
}

puis en le compilant avec g++ 3.4.4 (host:cygwin), j'obtiens la sortie suivante :

fred@HOME ~/test$ g++ -v
Modèle de thread: posix
version gcc 3.4.4 (cygming special, gdc 0.12, using dmd 0.125)

fred@HOME ~/test$ g++ -o test test.c

fred@HOME ~/test$ ./test.exe
x is true


En ce qui me concerne, je n'ai jamais connu à != d'autre signification que non égal qui est la même chose que différent de, c'est un comparateur et uniquement un comparateur.

Peut-être pourriez-vous aussi choisir des termes plus conventionnels afin qu'une personne désireuse d'en savoir plus sur c++ ne se retrouve pas complètement perdue dans d'autres lectures ... ou qu'une autre ne soit pas complètement perdue dans la votre.

F. Nouvier


Effectivement != est un opérateur binaire de comparaison (différent de).

PiFou

Effectivement j'ai fais une copie de trop ! vraiment désolé ! Je remet souvent plusieurs couches avant de finir complètement un article et c'est vrais qu'en ce moment j'ai pas eu beaucoup de temps pour relire ce que j'ai écrit. Ce point est passé à travers ma relecture et j'en suis navré. Je vous encourage à continuer à me montrer les passages ou j'ai fais des erreurs affin d'améliorer le contenu de ce cours.