Maison >développement back-end >C++ >Pourquoi `decltype((...))` renvoie-t-il une référence alors que `decltype(...)` ne le fait pas ?

Pourquoi `decltype((...))` renvoie-t-il une référence alors que `decltype(...)` ne le fait pas ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-02 04:31:301074parcourir

 Why Does `decltype((...))` Return a Reference While `decltype(...)` Doesn't?

Comprendre la signification des parenthèses dans decltype((...))

L'utilisation de doubles parenthèses dans decltype((... )) a un impact subtil mais important sur le type déduit par l'opérateur decltype, comme en témoigne l'exemple du C 17 Function Definition Concurrency (FCD).

Lorsqu'il est appliqué à un identifiant sans parenthèses (expression id) ou à une expression d'accès de membre de classe, decltype renvoie le type de l'entité référencée. Cependant, lorsque l'expression est une lvalue (une variable ou une expression faisant référence à un emplacement mémoire), decltype préfixe une référence supplémentaire (&) avant le type de l'entité.

Dans l'exemple FCD :

  • decltype(a->x) fait référence à une variable membre (double x) d'une instance de classe (*a) et renvoie ainsi le type de base du membre : double.
  • decltype((a->x)) enveloppe la même expression d'accès aux membres entre parenthèses, la traitant comme une lvalue. Par conséquent, decltype renvoie le type de la lvalue, qui est une référence au type double : const double&.

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