Questions marquées «constexpr»

constexpr est un modificateur introduit dans C ++ 11, qui informe le compilateur que la valeur d'une fonction ou d'une variable est connue ou peut être calculée au moment de la compilation. En tant que tel, il peut être utilisé comme constante dans des endroits où il ne pourrait pas l'être autrement.

337
Quand devez-vous utiliser la capacité constexpr en C ++ 11?

Il me semble qu'avoir une "fonction qui renvoie toujours 5" brise ou dilue le sens de "appeler une fonction". Il doit y avoir une raison, ou un besoin pour cette capacité, sinon ce ne serait pas en C ++ 11. Pourquoi est-il là? // preprocessor. #define MEANING_OF_LIFE 42 // constants: const int...

105
Constexpr implique-t-il en ligne?

Considérez la fonction intégrée suivante: // Inline specifier version #include<iostream> #include<cstdlib> inline int f(const int x); inline int f(const int x) { return 2*x; } int main(int argc, char* argv[]) { return f(std::atoi(argv[1])); } et la version équivalente de constexpr: //...

96
Que signifie «empoisonner une fonction» en C ++?

À la toute fin du discours de Scott Schurr "Présentation constexpr" à la CppCon , il demande "Y a-t-il un moyen d'empoisonner une fonction"? Il explique ensuite que cela peut être fait (bien que de manière non standard) en: Mettre un throwdans une constexprfonction Déclarer un non résolu extern...

92
Constexpr vs macros

Où devrais-je préférer les macros et où devrais-je préférer constexpr ? Ne sont-ils pas fondamentalement les mêmes? #define MAX_HEIGHT 720 contre constexpr unsigned int max_height = 720;

16
std :: pair <auto, auto> type de retour

Je jouais avec autoen std::pair. Dans le code ci-dessous, la fonction fest censée retourner un std::pairtype qui dépend d'un paramètre de modèle. Un exemple pratique: EXEMPLE 1 template <unsigned S> auto f() { if constexpr (S == 1) return std::pair{1, 2}; // pair of ints else if constexpr (S...

11
L'envergure peut-elle être constexpr?

Tous les constructeurs de std :: span sont déclarés constexpr, mais je n'arrive pas à faire fonctionner l'un d'eux dans un contexte constexpr. La suppression de la mise en commentaire de l'un des constexpr ci-dessous entraînera une erreur de compilation. #include <array> #include <span>...