假设我有一个整数数组定义如下:
static constexpr int IntArray[] = {1, 5, 10, 12, 17};
是否有一种方法可以在编译时获取最小或最大值?
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对constexpr
函数更加挑剔,因此我们必须推出一个递归算法。这个算法是简单的线性算法:
template <class T>
constexpr T &constexpr_min(T &a, T &b) {
return a > b ? b : a;
}
template <class T>
constexpr T &arrayMin_impl(T *begin, T *end) {
return begin + 1 == end
? *begin
: constexpr_min(*begin, arrayMin_impl(begin + 1, end));
}
template <class T, std::size_t N>
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);
(涉及IT技术,展示代码)constexpr
而不是static const
。 - AndyGconst
数组的内容不是编译时常量,所以如果它实际上不是 constexpr
,则根本无法在编译时执行任何操作。 - Quentinconstexpr
情况的信息,这实际上是有用的? - Kyle Strand
constexpr
函数可能可以实现这个功能。 - Some programmer dude