Maison > développement back-end > C++ > Les paramètres de référence peuvent-ils être utilisés dans les fonctions C Constexpr pour les expressions constantes ?

Les paramètres de référence peuvent-ils être utilisés dans les fonctions C Constexpr pour les expressions constantes ?

Mary-Kate Olsen
Libérer: 2024-11-29 01:54:09
original
674 Les gens l'ont consulté

Can Reference Parameters Be Used in C   Constexpr Functions for Constant Expressions?

Paramètres de référence dans les fonctions Constexpr et les expressions constantes

En C, une expression constante est une expression qui s'évalue à une valeur constante à la compilation- temps. Considérez la fonction constexpr suivante :

template <size_t S1, size_t S2>
auto concatenate(const std::array<uint8_t, S1> &data1,
                 const std::array<uint8_t, S2> &data2)
{
    std::array<uint8_t, data1.size() + data2.size()> result; // Possible error here

    return result;
}
Copier après la connexion

Lors de la compilation de cette fonction à l'aide de Clang 6.0 avec -std=c 17, la compilation échoue en raison de l'évaluation de l'expression data1.size() au moment de l'exécution. Cette erreur se produit uniquement lorsque les paramètres sont des références, indiquant un malentendu potentiel sur le comportement des paramètres de référence dans les fonctions constexpr.

Selon le standard C ([expr.const]/4), une expression est un noyau expression constante si son évaluation n'implique pas l'évaluation d'une expression id faisant référence à une variable ou à un membre de données de type référence, à moins qu'elle n'ait une initialisation précédente qui soit utilisable dans des expressions constantes ou que sa durée de vie ait commencé lors de l'évaluation de la constante principale expression.

Dans la fonction donnée, les paramètres de référence n'ont pas d'initialisation précédente, ce qui rend leurs expressions size() non constantes. Par conséquent, ils ne peuvent pas être utilisés dans une expression constante, ce qui entraîne une erreur de compilation.

Pour résoudre le problème et utiliser les paramètres de référence dans une expression constante, vous pouvez simplement fournir une initialisation précédente ou remplacer data1.size( ) avec le paramètre de modèle S1.

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