Déduction de type avec doubles parenthèses dans decltype
En C , le mot-clé decltype peut être utilisé pour déterminer le type d'une expression. Lorsqu'il est utilisé avec des parenthèses doubles, il présente un comportement subtil qui peut prêter à confusion.
Problème :
Considérez l'extrait de code suivant :
<code class="cpp">const int&&& foo(); int i; struct A { double x; }; const A* a = new A(); decltype(foo()) x1 = i; // type is const int&&& decltype(i) x2; // type is int decltype(a->x) x3; // type is double decltype((a->x)) x4 = x3; // type is const double&</code>
Pourquoi l'ajout de parenthèses à a->x dans la quatrième ligne change-t-il le type résultant de double en const double& ?
Réponse :
L'explication réside dans les règles de déduction des types à l'aide de decltype. Selon le standard du langage C :
Dans l'exemple donné :
Par conséquent, l'ajout de parenthèses à a->x modifie la déduction de type du type du membre accédé à une référence au membre lui-même.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!