Maison >développement back-end >C++ >Quel est l'impact des parenthèses dans `decltype((...))` ?

Quel est l'impact des parenthèses dans `decltype((...))` ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-03 05:38:30384parcourir

 What's the Impact of Parentheses in `decltype((...))`?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn