這是正確的; std::min
和std::max
不是constexpr
,即使在最新的C++ 14草案(N3690)中也沒有,所以它們不能在常量表達式中使用。
沒有很好的理由,只有不好的理由。最明顯的不好的原因是C++委員會由有限的時間進行標準化工作的個人組成,沒有人負責完成這些功能constexpr
。
注N3039,變化到在2010年通過的C++標準,特異性略微延長了constexpr
設施,使得功能如min
和max
可以作出constexpr
。
您可以解決這個定義自己min
和max
功能:
template<typename T>
constexpr const T &c_min(const T &a, const T &b) {
return b < a ? b : a;
}
template<typename T, class Compare>
constexpr const T &c_min(const T &a, const T &b, Compare comp) {
return comp(b, a) ? b : a;
}
template<typename T>
constexpr const T &c_min_impl(const T *a, const T *b) {
return a + 1 == b ? *a : c_min(*a, c_min_impl(a + 1, b));
}
template<typename T>
constexpr T c_min(std::initializer_list<T> t) {
return c_min_impl(t.begin(), t.end());
}
// ... and so on
'static_assert(的sizeof(int)的> 4 ||的sizeof(浮動)> 4, 「無賴」);' –