Dans de Stroustrup exemple, quel est le côlon dire dans “return 1 : 2”?

Je ne comprends pas une utilisation particulière d'un colon.

Je l'ai trouvé dans le livre Le Langage de Programmation C++ par Bjarne Stroustrup, 4e édition, l'article 11.4.4 "Appel et de Retour", page 297:

void g(double y)
{
  [&]{ f(y); }                                               //return type is void
  auto z1 = [=](int x){ return x+y; }                        //return type is double
  auto z2 = [=,y]{ if (y) return 1; else return 2; }         //error: body too complicated
                                                             //for return type deduction
  auto z3 =[y]() { return 1 : 2; }                           //return type is int
  auto z4 = [=,y]()−>int { if (y) return 1; else return 2; } //OK: explicit return type
}

La confusion du côlon apparaît sur la ligne 7, dans la déclaration return 1 : 2. Je n'ai aucune idée de ce qu'elle pourrait être. Ce n'est pas une étiquette ou d'un opérateur ternaire.

Il semble comme un conditionnel opérateur ternaire sans le premier membre (et sans le ?), mais dans ce cas je ne comprends pas comment cela pourrait fonctionner sans condition.

  • C'est une erreur de compilation sur ma fin (gcc et clang). En Plus de toutes ces lignes ont besoin de points-virgules, mais toujours une erreur.
  • Modérateur Remarque: s'il vous Plaît réfléchir très attentivement avant de lancer un vote pour fermer cela comme une "faute de frappe" de la question. Oui, le problème, c'est une faute de frappe, mais ce n'est pas une faute de frappe que le demandeur a fait. C'est plutôt celle qui se trouve dans un livre publié. Que signifie cette question et ses réponses pourraient bien vous être utiles à d'autres dans l'avenir, ce qui est une forte contre-indicateurs pour la refermer comme une faute de frappe. (Mise à JOUR: Cette rubrique est maintenant en cours de discussion sur Meta; sentez-vous svp libre pour peser là.)
  • Peut-être la meilleure réponse serait: Essayez de compiler le code; s'il ne compile pas, c'est une bonne indication que c'est une faute de frappe.
  • Je ne peux penser à un certain nombre d'exemples sur le dessus de ma tête qui ne parviennent pas à compiler (ou même causer une erreur interne du compilateur) sur un compilateur, mais sont acceptés sans problème sur une autre
  • J'ai juste essayé quelques fois des expressions avec MSVC et ils n'ont pas à compiler. Donc clairement, l'ensemble du chapitre, je viens de lire doit être une faute de frappe? 😉 Compilateurs C++ ne parviennent pas à compiler valide le code C++ de tous les temps, vient de la langue étant ridiculement compliqué.
  • Trop vrai malheureusement que d'un compilateur ou d'un autre échoue à compiler, "valide" de code, et peut-être que C++ est particulièrement médiocre dans ce domaine. Mais toujours la première chose à faire est d'essayer un compilateur.
  • J'ai ajouté mon "compiler" commentaire, parce que les réponses ci-dessous a omis de le mentionner et il n'y a aucune indication de l'OP de toutes les erreurs de compilation.
  • utilisation auto z3 =[y]() { return y ? 1 : 2; }
  • Probablement dû à l'éditeur de ne pas l'exécution de leur linter...

InformationsquelleAutor Piockñec | 2019-04-30