2017-07-11 5 views

Répondre

4

Une telle comparaison est bien formée, mais son résultat n'est pas spécifié.

[expr.rel]/3 La comparaison des pointeurs vers des objets est défini comme suit:

- Si deux pointeurs pointent vers différents éléments d'un même tableau, ou pour des sous-objets de celle-ci, le pointeur vers le élément avec l'indice supérieur compare plus grand. - Si un pointeur pointe sur un élément d'un tableau, ou sur un sous-objet de celui-ci, et qu'un autre pointeur dépasse le dernier élément du tableau, le dernier pointeur est plus grand.

- Si deux pointeurs pointent vers différents membres de données non statiques du même objet, ou vers des sous-objets de ces membres, récursivement, le pointeur vers le membre déclaré plus tard est supérieur à condition que les deux membres aient le même contrôle d'accès. 11) et pourvu que leur classe ne soit pas une union.

[expr.rel]/4 Si deux opérandes p et q comparer égal (5,10), et p<=qp>=q la fois le rendement et truep<q et p>q fois le rendement false. Dans le cas contraire, si un pointeur p compare supérieur à un pointeur q, p>=q, p>q, q<=p et q<p donnent tous true et p<=q, p<q, q>=p et q>p rendement global false. Sinon, le résultat de chacun des opérateurs n'est pas spécifié.

Un pointeur nul ne tombe dans aucune des trois clauses de [expr.rel]/3, et il se compare ni plus ni moins d'un pointeur non nul. Ce cas relève alors de la clause "contraire" de [expr.rel]/4.

+0

Vous avez complètement raté p4. –

+0

@ T.C. Il n'y a rien de pertinent dans p4 de ma copie de C++ 14. Y a-t-il quelque chose de nouveau dans C++ 17? –

+0

"Sinon, le résultat de chacun des opérateurs n'est pas spécifié." –