Que signifient les doubles parenthèses dans decltype((...)) ?
Le standard C définit le comportement du decltype(( ...)) syntaxe de la section 7.6.1.2/4 du FCD. Cette syntaxe permet aux programmeurs de déduire le type d'une expression, comme le démontre l'exemple 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>
La présence de parenthèses autour de l'expression dans decltype((a->x)) fait une différence significative dans le type déduit. Sans les parenthèses, le type est simplement double, indiquant le type de retour de l'accès membre (a->x).
Cependant, avec les parenthèses, l'expression devient une lvalue. Selon la norme, si e est une lvalue, decltype(e) est T&, où T est le type de e. Dans ce cas, T est double, et le type déduit est donc const double&.
Par conséquent, les parenthèses dans decltype((a->x)) forcent la déduction à traiter l'expression comme une lvalue, ce qui entraîne dans un type différent de celui si les parenthèses étaient omises.
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!