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; }
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!