Disons que j’ai un tableau d’entiers défini comme ça:
static constexpr int IntArray[] = {1, 5, 10, 12, 17};
Y a-t-il un moyen d’obtenir la valeur minimale ou maximale au moment de la compilation?
Allons de l’avant avec la solution C ++ 17 pour les futurs chercheurs:
constexpr int IntArray[] = {1, 5, 10, 12, 17}; constexpr int min = *std::min_element(std::begin(IntArray), std::end(IntArray)); static_assert(min == 1);
C ++ 11 est plus difficile avec les fonctions constexpr
, nous devons donc déployer un algorithme récursif. Celui-ci est simple, linéaire:
template constexpr T &constexpr_min(T &a, T &b) { return a > b ? b : a; } template constexpr T &arrayMin_impl(T *begin, T *end) { return begin + 1 == end ? *begin : constexpr_min(*begin, arrayMin_impl(begin + 1, end)); } template constexpr T &arrayMin(T(&arr)[N]) { return arrayMin_impl(arr, arr + N); } constexpr int IntArray[] = {1, 5, 10, 12, 17}; constexpr int min = arrayMin(IntArray);
Voir en direct sur Coliru