Maison > développement back-end > C++ > Pourquoi l'utilisation des paramètres de référence `std::array` dans une fonction C empêche-t-elle l'évaluation d'une expression constante ?

Pourquoi l'utilisation des paramètres de référence `std::array` dans une fonction C empêche-t-elle l'évaluation d'une expression constante ?

Mary-Kate Olsen
Libérer: 2024-12-13 08:02:11
original
269 Les gens l'ont consulté

Why Does Using `std::array` Reference Parameters in a C   Function Prevent Constant Expression Evaluation?

Paramètres de référence et expressions constantes

Dans le code C fourni, la fonction concaténer reçoit deux paramètres de référence de type std::array. Cependant, l'erreur rencontrée lors de la compilation concerne la fonction membre size du tableau, qui n'est pas considérée comme une expression constante du fait de son caractère de référence.

Selon le standard C, un noyau une expression constante est définie comme une expression qui ne s'évalue pas comme :

  • Une expression d'identifiant (c'est-à-dire une référence) à une variable ou un membre de données de type référence, sauf si la référence :

    • A une initialisation précédente
    • Est utilisable dans des expressions constantes
    • Sa durée de vie a commencé au sein de l'évaluation de l'expression

Dans ce cas, le paramètre de référence au tableau ne répond à aucun de ces critères. Sans une initialisation préalable, la référence ne peut pas être évaluée comme une expression constante.

Par conséquent, puisque la fonction membre size est appelée sur le paramètre de référence (c'est-à-dire data1.size()), elle ne peut pas être considérée comme une expression constante, entraînant une erreur de compilation.

Pour résoudre ce problème, il est recommandé d'utiliser directement les paramètres du modèle S1 et S2 pour déterminer la taille du tableau de résultats. au lieu de s'appuyer sur la fonction membre size des paramètres de référence :

auto result = std::array<uint8_t, S1 + S2>{};
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal